2016-02-09 4 views
3

Ниже я создал 2 таблицы transaction_type и transaction_master, затем transaction_type. transaction_type является содержать кредитные и дебетовые идентификаторами затем transaction_type является содержать детали сделкиpivot конвертировать null в ноль

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» и «отрицательные» значения должны быть «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 
+3

Не могли бы вы показать нам ваш запрос? –

+0

CASE WHEN ISNULL (** col_name **, 0) <= 0 THEN 0 ELSE ** col_name ** END AS alias_name – Sankar

+0

с aa as (выберите год (d.date_of_transaction), left (имя_таблицы (месяц, дата_изменения) , 3) в качестве месяца –

ответ

1

Вы можете использовать ISNULL в окончательный SELECT:

[ISNULL] Заменяет значение NULL на указанное значение замены.

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

TT @ благодарит свою работу –

2

Вы можете использовать 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 
+0

ошибка в ближнем «как» –

+0

@kingKabil пропустила 'END', проверьте обновленный ответ. –

+0

теперь ошибка в «преобразовании nvarchar в int» –

Смежные вопросы