pivot 将 null 转换为零
pivot convert null to zero
下面我创建了一个 2 table transaction_type 和 transaction_master 然后
transaction_type。 transaction_type 包含贷方和借方 ID
然后 transaction_type 包含交易详细信息
transaction_type
-----------------
transaction-id|transaction-name
1 |credit
2 |debit
transaction_master
-----------
transaction-id|date_of_transaction|amount
1 |2016-01-12 |100
2 |2015-12-30 |200
1 |2016-01-05 |300
1 |2015-12-04 |500
2 |2015-12-12 |50
2 |2015-12-25 |1000
1 |2016-01-30 |100
normal PIVOT output is
-----------------------
YEAR|Jan |Feb |mar |Apr |may |Jun |Jul |Aug |Sep |Oct |Nov |Dec
2015|null|null|null|null|null|null|null|null|null|null|null|-700
2016|500 |null|null|null|null|null|null|null|null|null|null|null
But i want this
YEAR|Jan |Feb |mar |Apr |may |Jun |Jul |Aug |Sep |Oct |Nov |Dec
2015|0 |0 |0 |0 |0 |0 |0 |0 |0 |0 |0 |0
2016|500 |0 |0 |0 |0 |0 |0 |0 |0 |0 |0 |0
上面的"NULL"和"negative"值应该是“0”
with AA as(select year(d.date_of_transaction),left(date name(month,date_of_transaction),3) as month,sum (case when c. transaction_type like '%c%' then d.Amount else d.Amount*-1)as balance
from transaction_master d join on transaction_type c c.transaction-id=d.transaction-id group by date_of_transaction) select * from AA pivot(sum(balance) for [month] in (Jan,Feb,Mar,Apr,May,jun,Jul,Aug,Sep,Oct,Nov,Dec)) as pvt
您可以在下面使用 CASE
和 ISNULL
:
with aa as(select year(d.date_of_transaction),
case when isnull(left(datename(month,date_of_transaction),3),0) < 1 then 0 else left(datename(month,date_of_transaction),3) end as month
您可以在最后的 SELECT
子句中使用 ISNULL
:
[ISNULL] Replaces NULL with the specified replacement value.
;with AA as(
select
year(d.date_of_transaction) AS [year],
left(datename(month,date_of_transaction),3) as [month],
sum (case when c. transaction_type like '%c%' then d.Amount else d.Amount*-1 end)as balance
from
transaction_master d join transaction_type c on c.[transaction-id]=d.[transaction-id]
group by
date_of_transaction
)
select
[year],ISNULL(Jan,0) Jan,ISNULL(Feb,0) Feb,ISNULL(Mar,0) Mar,ISNULL(Apr,0) Apr,ISNULL(May,0) May,ISNULL(jun,0) jun,ISNULL(Jul,0) Jul,ISNULL(Aug,0) Aug,ISNULL(Sep,0) Sep,ISNULL(Oct,0) Oct,ISNULL(Nov,0) Nov,ISNULL([Dec],0) [Dec]
from
AA
pivot(sum(balance) for [month] in (Jan,Feb,Mar,Apr,May,jun,Jul,Aug,Sep,Oct,Nov,Dec)) as pvt
下面我创建了一个 2 table transaction_type 和 transaction_master 然后 transaction_type。 transaction_type 包含贷方和借方 ID 然后 transaction_type 包含交易详细信息
transaction_type
-----------------
transaction-id|transaction-name
1 |credit
2 |debit
transaction_master
-----------
transaction-id|date_of_transaction|amount
1 |2016-01-12 |100
2 |2015-12-30 |200
1 |2016-01-05 |300
1 |2015-12-04 |500
2 |2015-12-12 |50
2 |2015-12-25 |1000
1 |2016-01-30 |100
normal PIVOT output is
-----------------------
YEAR|Jan |Feb |mar |Apr |may |Jun |Jul |Aug |Sep |Oct |Nov |Dec
2015|null|null|null|null|null|null|null|null|null|null|null|-700
2016|500 |null|null|null|null|null|null|null|null|null|null|null
But i want this
YEAR|Jan |Feb |mar |Apr |may |Jun |Jul |Aug |Sep |Oct |Nov |Dec
2015|0 |0 |0 |0 |0 |0 |0 |0 |0 |0 |0 |0
2016|500 |0 |0 |0 |0 |0 |0 |0 |0 |0 |0 |0
上面的"NULL"和"negative"值应该是“0”
with AA as(select year(d.date_of_transaction),left(date name(month,date_of_transaction),3) as month,sum (case when c. transaction_type like '%c%' then d.Amount else d.Amount*-1)as balance
from transaction_master d join on transaction_type c c.transaction-id=d.transaction-id group by date_of_transaction) select * from AA pivot(sum(balance) for [month] in (Jan,Feb,Mar,Apr,May,jun,Jul,Aug,Sep,Oct,Nov,Dec)) as pvt
您可以在下面使用 CASE
和 ISNULL
:
with aa as(select year(d.date_of_transaction),
case when isnull(left(datename(month,date_of_transaction),3),0) < 1 then 0 else left(datename(month,date_of_transaction),3) end as month
您可以在最后的 SELECT
子句中使用 ISNULL
:
[ISNULL] Replaces NULL with the specified replacement value.
;with AA as(
select
year(d.date_of_transaction) AS [year],
left(datename(month,date_of_transaction),3) as [month],
sum (case when c. transaction_type like '%c%' then d.Amount else d.Amount*-1 end)as balance
from
transaction_master d join transaction_type c on c.[transaction-id]=d.[transaction-id]
group by
date_of_transaction
)
select
[year],ISNULL(Jan,0) Jan,ISNULL(Feb,0) Feb,ISNULL(Mar,0) Mar,ISNULL(Apr,0) Apr,ISNULL(May,0) May,ISNULL(jun,0) jun,ISNULL(Jul,0) Jul,ISNULL(Aug,0) Aug,ISNULL(Sep,0) Sep,ISNULL(Oct,0) Oct,ISNULL(Nov,0) Nov,ISNULL([Dec],0) [Dec]
from
AA
pivot(sum(balance) for [month] in (Jan,Feb,Mar,Apr,May,jun,Jul,Aug,Sep,Oct,Nov,Dec)) as pvt