基于第一行的SQL列数计数
我正在使用SQL Server 2012 假设我有下表基于第一行的SQL列数计数,sql,sql-server,case,Sql,Sql Server,Case,我正在使用SQL Server 2012 假设我有下表 1 2 3 4 5 6 7 8 9 10 Client1 1/31/2017 a y Client1 1/31/2017 b n Client1 1/31/2017 c 1 Client1 1/31/2017 d
1 2 3 4 5 6 7 8 9 10
Client1 1/31/2017 a y
Client1 1/31/2017 b n
Client1 1/31/2017 c 1
Client1 1/31/2017 d 2
Client1 1/31/2017 e 0
我正在将一个表中的数据转换为另一个表中的不同格式
列标题恰好是数字,如图1-10所示
转换逻辑相当简单,但值所在的列取决于第3列中的值(以字母显示)
这是一个简化的例子。在实际示例中,最多可以有86列
我本来打算用一个CASE
语句来实现这一点,但我能想到的将数据强制放入特定列的唯一方法是用逗号输入一组NULL
值
是否有一种方法可以代替,例如,如果第3列的值为“a”,则将该值放在第10列中,如果第3列的值为“b”,则将该值放在第9列中,依此类推
我宁愿按数字指定列,然后必须用NULLS
例如,我会写一些
CASE WHEN 3 = a then NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,value
WHEN 3 = b then NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,value
ELSE NULL END values
WHEN 3 = a then (put the value in column 10)
但我还是希望我能做点像
CASE WHEN 3 = a then NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,value
WHEN 3 = b then NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,value
ELSE NULL END values
WHEN 3 = a then (put the value in column 10)
谢谢对您想要的结果不是100%清楚
Declare @YourTable Table ([1] varchar(25),[2] date,[3] varchar(25))
Insert Into @YourTable values
('Client1','1/31/2017','a'),
('Client1','1/31/2017','b'),
('Client1','1/31/2017','c'),
('Client1','1/31/2017','d')
Select [1],[2],[3]
,[4] = case when [3]='g' then [3] end
,[5] = case when [3]='f' then [3] end
,[6] = case when [3]='e' then [3] end
,[7] = case when [3]='d' then [3] end
,[8] = case when [3]='c' then [3] end
,[9] = case when [3]='b' then [3] end
,[10]= case when [3]='a' then [3] end
from @YourTable
返回
应该可以了。@JayC很高兴这有帮助。我担心我完全没有领会你的意图