Убрать лишнюю строку заголовка и оставить значения NULL в первой строке
Есть задача собрать заголовок из 2 строк, причем в первой строке должны быть NULL, а также вывести данные из таблицы.
примерно так:
null dateBegin dateEnd null
Наименование Дата начала Дата окончания Цена
Конфета 1 2020-01-01 2020-01-01 50
Конфета 2 2020-01-02 2020-03-02 150
Сейчас это выглядит так:
CREATE TABLE #tbl (
name VARCHAR(256) NOT NULL
,beginDt DATE
,endDt DATE
,price DECIMAL(9,2));
INSERT INTO #tbl
VALUES
('конфета 1','2020-01-01', '2020-02-01', 50)
,('конфета 2','2020-01-02', '2020-03-02', 150);
SELECT
'NULL' AS 'Наименование'
,'dateBegin' AS 'Дата начала'
,'dateEnd' AS 'Дата окончания'
,'NULL' AS 'Цена'
UNION ALL
SELECT
'Наименование'
,'Дата начала'
,'Дата окончания'
,'Цена'
UNION ALL
SELECT
name AS 'Наименование'
,CAST(beginDt AS VARCHAR(15)) AS 'Дата начала'
,CAST(endDt AS VARCHAR(15)) AS 'Дата окончания'
,CAST(price AS VARCHAR(15)) AS 'Цена'
FROM #tbl
Есть первая лишняя строка, ее б убрать как-то
Наименование Дата начала Дата окончания Цена
NULL dateBegin dateEnd NULL
Наименование Дата начала Дата окончания Цена
конфета 1 2020-01-01 2020-02-01 50
конфета 2 2020-01-02 2020-03-02 150
Просто нельзя сделать запрос типа
SELECT
'Наименование' AS NULL
,'Дата начала' AS dateBegin
,'Дата окончания' AS dateEnd
,'Цена' AS NULL
ибо Неправильный синтаксис около ключевого слова "NULL".
Ответы (1 шт):
Создание, вставка и сам запрос написаны корректно. Данных возвращается 4 записи. Это можно проверить, сделав подзапрос select count(*) from (<ваш юнион>).
То что вы называете лишней строкой, а думаю, это шапка у таблицы. В SQL мы можем управлять только названием колонок, управление видимостью шапки происходит на стороне клиента.
С точки зрения как SQL, так и привычного интерфейса решение очень спорное. Так как вы пытаетесь добавить интерфейсные части в данные.
Может быть будет достаточно указать название в следующем формате Дата начала\dateBegin или настраивать отображение на клиенте с помощью дополнительных компонентов.