我需要类似的东西:
SELECT dt, (???) AS C FROM (SELECT dt,c1,c2,c3,c4 ...
dt - datetime和我有一些奇怪的结构,例如:
24.02.2011 null null null "text"
25.02.2011 null "te" null "text"
26.02.2011 null "te" null null
必须成为
24.02.2011 "text"
25.02.2011 "te"
25.02.2011 "text"
26.02.2011 "te"
或者
24.02.2011 "c4" "text"
25.02.2011 "c2" "te"
25.02.2011 "c4 "text"
26.02.2011 "c2" "te"
如果我select dt, с1+с2+с3+с4 as C from select dt,c1,c2,c3,c4
会有
25.02.2011 "tetext"
此输出对我来说是不正确的。
一定是
25.02.2011 "te"
25.02.2011 "text"
所以我需要知道如何将行+列交换为行。
谢谢。MS SQL Server 2008。
我目前的想法是创建临时的,甚至可能是我需要的结构的静态表,然后插入数据然后从中选择。
答案 0 :(得分:1)
最简单的可能是UNION ALL:
SELECT dt,'c1' as Col,c1 from table1 where c1 is not null
UNION ALL
SELECT dt,'c2' as Col,c2 from table1 where c2 is not null
UNION ALL
SELECT dt,'c3' as Col,c3 from table1 where c3 is not null
UNION ALL
SELECT dt,'c4' as Col,c4 from table1 where c4 is not null
这是你的样本数据的中间行(这意味着产生两个输出行),这意味着使用COALESCE / ISNULL的解决方案可能注定失败。
答案 1 :(得分:0)