随附的代码生成一个包含一行和十二列的简单表。我的目标是将最终结果设置为显示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列(不包括标题)。
答案 0 :(得分:0)
您可以使用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
MX | Date :- | :--------- M1 | 04/30/2017 M2 | 03/31/2017 M3 | 04/30/2017 M4 | 03/31/2017
答案 1 :(得分:0)
只需生成您想要的表即可
select v.header,
convert(varchar(10), v.dte, 101)
from (values (@queryDate1, 'M1'),
(@queryDate2, 'M2'),
(@queryDate3, 'M3'),
. . .
) v(dte, header);