Убрать лишнюю строку заголовка и оставить значения 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 шт):

Автор решения: Alex R.

Создание, вставка и сам запрос написаны корректно. Данных возвращается 4 записи. Это можно проверить, сделав подзапрос select count(*) from (<ваш юнион>).

То что вы называете лишней строкой, а думаю, это шапка у таблицы. В SQL мы можем управлять только названием колонок, управление видимостью шапки происходит на стороне клиента.

С точки зрения как SQL, так и привычного интерфейса решение очень спорное. Так как вы пытаетесь добавить интерфейсные части в данные.

Может быть будет достаточно указать название в следующем формате Дата начала\dateBegin или настраивать отображение на клиенте с помощью дополнительных компонентов.

→ Ссылка