【发布时间】:2014-06-07 22:16:31
【问题描述】:
我能够取消透视表,但结果中不包含空值。
create table pivot_task
(
age int null,
[a] numeric(8,2),
[b] numeric(8,2),
[c] numeric(8,2),
[d] numeric(8,2),
[e] numeric(8,2)
);
select * from pivot_task;
insert into pivot_task values (18, 0.5, null, 0.6, 1.21, 1.52),
(19, 7.51, 6.51, 5.51, null, 3.53),
(20, 4.52, 4.52, 6.52, 3.53, null);
select age, [over], [av]
from pivot_task
unpivot
(
[av]
for [over] in ([a], [b], [c], [d], [e])
) a;
您可以在 http://sqlfiddle.com/#!6/2ab59/1 上看到 18 岁 [over] b 的结果,并且它的 null 值丢失了我想在每次遇到 null 时也包含 null。
我发现用不同的值替换 null 然后替换所有那些不变的不同值的方法对我的工作来说是不可行的。我只想包含在 unpivot 中。
【问题讨论】:
-
'18 岁以上 [over]'?这是否包含特别图形或暴力的 SQL?
-
@Westie 你是说在 pivot_task 表中用其他 unpivot 替换空值,但我无法修改源表 pivot_task。
-
如果您的数字属于指定范围(表示非负数),您可以解决此问题。 +1 格式正确的问题。
-
不幸的是,
UNPIVOT被记录以消除NULLs - “UNPIVOT输入中的空值在输出中消失” - 所以对于这个问题没有“仅反透视”解决方案。
标签: sql sql-server sql-server-2008 sql-server-2012 unpivot