2016-02-08 54 views
0

如何刪除零並將它們替換爲空值,因爲它們實際上不是零值?Pivot with datediff

我的工作數據

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 

回答

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肯定是做得比他更舉例說明在他/她的成績越來越零。

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 
+0

但是,請注意,NULLIF()不會區分實際爲零的數字和與NULL相加的數字。所有的零都將顯示爲NULL。 –

+0

@TabAlleman對,我有零實際爲零的情況。有沒有解決的辦法? –

+0

@TabAlleman我必須在這裏失去一些東西...這個總結在哪裏呢?我在他的PIVOT查詢中看不到'SUM()',只有'MAX()'。 –