转发与约会

时间:2016-02-08 18:04:24

标签: sql-server sql-server-2008 tsql

我如何删除零并将它们替换为空值,因为它们实际上不是零值?

我的工作数据

id       class     startdate      enddate    
 1        High        1/1/15       2/1/15      
 1         Low        5/1/15       6/1/15      
 1         Mid        6/1/15      6/10/15 
 2     Mid-low        6/1/15      6/10/15

我的查询

 select y.id, y.startdate, y.enddate, ISNULL(y.High,'') AS HIGH, ISNULL(y.MID,'') AS MID, ISNULL(y.LOW,'') AS LOW, ISNULL(y.Mid-low,'') AS Mid-low, 
from
(
select id, class, datediff(day, startDate, endDate) as days
from @test
) x
pivot
(
max(days) for class in (high, low, med)
) y

这将返回

下面的设定值
  id     High       Mid    low    Mid-low
   1       30         9     30          0
   2        0         0      0         30

2 个答案:

答案 0 :(得分:1)

使用NULLIF()功能:

  

如果两个表达式不相等,则NULLIF返回第一个表达式。如果表达式相等,则NULLIF返回第一个表达式类型的空值。

select id,NULLIF(high,0) AS high,NULLIF(med,0) AS med,NULLIF(low,0) AS low
from
(
select id, class, datediff(day, startDate, endDate) as days
from @test
) x
pivot
(
max(days) for class in (high, low, med)
) y

答案 1 :(得分:0)

必须发布此内容作为显示代码的答案。我无法重现OP的结果。

此代码:

DECLARE @Table TABLE (
  ColA char(1)
 ,ColB int
 );

 INSERT INTO @Table(ColA,ColB) VALUES ('A',NULL);

SELECT * FROM (
SELECT ColA,ColB
FROM @Table
)x
PIVOT (
SUM(ColB) FOR ColA IN (A,B)  --same result if SUM() is changed to MAX()
) y;

结果:

A     B
NULL  NULL

所以OP肯定做的事情比他的例子更能说明他的结果中的零点。