Поворот таблицы с одной строкой заголовка и одной строкой данных - PullRequest
1 голос
/ 04 апреля 2019

Прикрепленный код создает простую таблицу с одной строкой и двенадцатью столбцами. Моя цель - развернуть конечный результат, чтобы отобразить 12 строк и два столбца с заголовками столбцов MX и Date. Я новичок в SQL и просто не могу сделать это сегодня днем. Пожалуйста, помогите.

Я попытался просмотреть несколько сводных примеров, но все они, кажется, демонстрируют противоположное, то есть преобразование строк в столбцы. Может быть, я новичок в этом, но я не могу представить, как будет выглядеть код, если бы он был наоборот. Я уверен, что это очень легко; Мне просто нужно увидеть это, чтобы выучить это.

DECLARE @queryDate1 datetime SET @queryDate1 = '04/30/2017';
DECLARE @queryDate2 datetime set @queryDate2 = '03/31/2017';
DECLARE @queryDate3 datetime SET @queryDate3 = '04/30/2017';
DECLARE @queryDate4 datetime set @queryDate4 = '03/31/2017';
DECLARE @queryDate5 datetime SET @queryDate5 = '04/30/2017';
DECLARE @queryDate6 datetime set @queryDate6 = '03/31/2017';
DECLARE @queryDate7 datetime SET @queryDate7 = '04/30/2017';
DECLARE @queryDate8 datetime set @queryDate8 = '03/31/2017';
DECLARE @queryDate9 datetime SET @queryDate9 = '04/30/2017';
DECLARE @queryDate10 datetime set @queryDate10 = '03/31/2017';
DECLARE @queryDate11 datetime SET @queryDate11 = '04/30/2017';
DECLARE @queryDate12 datetime set @queryDate12 = '03/31/2017';


SELECT
     convert(varchar(10),@queryDate1,101) as [M1]
    ,convert(varchar(10),@queryDate2,101) as [M2]
    ,convert(varchar(10),@queryDate3,101) as [M3]
    ,convert(varchar(10),@queryDate4,101) as [M4]
    ,convert(varchar(10),@queryDate5,101) as [M5]
    ,convert(varchar(10),@queryDate6,101) as [M6]
    ,convert(varchar(10),@queryDate7,101) as [M7]
    ,convert(varchar(10),@queryDate8,101) as [M8]
    ,convert(varchar(10),@queryDate9,101) as [M9]
    ,convert(varchar(10),@queryDate10,101) as [M10]
    ,convert(varchar(10),@queryDate11,101) as [M11]
    ,convert(varchar(10),@queryDate12,101) as [M12]`

Фактическим результатом будет таблица с двумя столбцами. Первый столбец имеет заголовок MX, а первая запись будет M1, вторая строка будет M2 и т. Д. До M12.

Второй столбец будет помечен как Date, а первая запись будет 04/30/2017, вторая запись будет 03/31/2017 и так далее.

Таким образом, таблица состоит из 12 столбцов и 1 строки в 12 строк и 2 столбца (исключая заголовки).

Ответы [ 2 ]

0 голосов
/ 04 апреля 2019

Просто сгенерируйте нужную таблицу заранее:

select v.header,
       convert(varchar(10), v.dte, 101)
from (values (@queryDate1, 'M1'),
             (@queryDate2, 'M2'),
             (@queryDate3, 'M3'),
             . . .
     ) v(dte, header);
0 голосов
/ 04 апреля 2019

Вы можете использовать UNION ALL:

SELECT 'M1' AS [MX], M1 AS [Date] FROM mytable
UNION ALL SELECT 'M2', M2 AS [Date] FROM mytable
UNION ALL SELECT 'M3', M3 AS [Date] FROM mytable
UNION ALL SELECT 'M4', M4 AS [Date] FROM mytable
--- and so on until M12

Демонстрация на DB Fiddle :

MX | Date      
:- | :---------
M1 | 04/30/2017
M2 | 03/31/2017
M3 | 04/30/2017
M4 | 03/31/2017
...