Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于第一行的SQL列数计数_Sql_Sql Server_Case - Fatal编程技术网

基于第一行的SQL列数计数

基于第一行的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

我正在使用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       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很高兴这有帮助。我担心我完全没有领会你的意图