2014-12-09 2 views
-1

을 피벗을 사용할 때 내가 아래에 언급 된 스키마와 테이블이 ISNULL을 사용하거나 기능을 COALESCE 방법 :MS에서 SQL

InvoiceID int PK, 
Date datetime, 
Amount Money 

지금 테이블에서 년, 월 및 금액을 포함하는 테이블을 생성 위.

Year | Month | Amount 
2014 | Dec | 10 

나는 그 모든 개월이 테이블을 피벗 내가 가진 문제는 내가 대신 널 (null)의 제로 한 금액이없는 달을 설정해야한다는 것입니다

select * from (select year(Date) as InvoiceYear, isnull(left(datename(month, date),3),0) as InvoiceMonth, Amount from Invoice) as Sid pivot (sum(Amount) for InvoiceMonth in (jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec)) as P1 

+0

RDBMS는 무엇입니까? 대부분은 NULL을 주어진 값으로 변환하기위한'NVL' 함수를 가지고 있습니다. –

+0

@ Mr.Llama : MS SQL 2008을 사용합니다. – Sid

+0

SUM (ISNULL (Amount, 0))을 찾고 있습니까 – Jt2ouan

답변

1

인보이스가없는 달이있는 경우 테이블을 피벗 할 때 해당 달의 금액에 대해 항상 null 값을 생성합니다.

의견에 제안 된 집계 테이블을 설정하지 않으려면 다음과 같이 할 수 있습니다. 그러나 집계 테이블의 성능이 더 좋은 것은 아닙니다.

SELECT 
invoiceYear, 
isnull(jan,0) as [jan], 
isnull(feb,0) as [feb], 
etc... 
FROM 
(select * from 
(select year(Date) as InvoiceYear, 
isnull(left(datename(month, date),3),0) as InvoiceMonth, 
Amount from Invoice) 
as Sid 
pivot (sum(Amount) for InvoiceMonth in (jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec)) as P1 
) A 
GROUP BY invoiceYear 
관련 문제