我正在使用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)
由于
答案 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
返回