SQL计数基于第一行的列号

时间:2017-02-11 23:30:37

标签: 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       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)

由于

1 个答案:

答案 0 :(得分:1)

不是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

返回

enter image description here