Как получить данные двух столбцов в один столбец, используя case в sqlserver2014? - PullRequest
1 голос
/ 11 июля 2019

Мне нужно вывести сумму продаж 2019 года в отдельный столбец, называемый новым, если продажи 2018 = 0. Вот мой код для справки

SELECT 
    ISNULL(sp.Telephone,'No Sales Employee'),
    od.CardCode,
    od.CardName,
    Sum(case when c.U_ItemStatus = '2' then od.DocTotal else 0 end) as Sold2018,
    Sum(case when c.U_ItemStatus = '1' then od.DocTotal else 0 end) as Sold2019,
    (select od.DocTotal where c.U_ItemStatus = '2' ) as new
FROM
    ORDR od
Left Join OSLP sp
    On od.SlpCode=sp.SlpCode
left join RDR1 a on a.DocEntry = od.DocEntry
left join OITM b on b.ItemCode = a.ItemCode
left Join OITB c on c.ItmsGrpCod = b.ItmsGrpCod
Group By
    sp.Telephone,
    od.CardCode,
    od.CardName,
    c.U_ItemStatus,
    od.DocTotal

Ответы [ 2 ]

1 голос
/ 11 июля 2019

вы можете использовать

SELECT 
    ISNULL(sp.Telephone,'No Sales Employee') ,
    od.CardCode,
    od.CardName,
    Sum(case when c.U_ItemStatus = '2' then od.DocTotal else 0 end) as Sold2018,
    Sum(case when c.U_ItemStatus = '1' then od.DocTotal else 0 end) as Sold2019,
    CASE WHEN Sum(case when c.U_ItemStatus = '2' then od.DocTotal else 0 end) = 0 THEN 
              Sum(case when c.U_ItemStatus = '1' then od.DocTotal else 0 end) END as new
FROM
    ORDR od
Left Join OSLP sp
    On od.SlpCode=sp.SlpCode
left join RDR1 a on a.DocEntry = od.DocEntry
left join OITM b on b.ItemCode = a.ItemCode
left Join OITB c on c.ItmsGrpCod = b.ItmsGrpCod
Group By
    sp.Telephone,
    od.CardCode,
    od.CardName,
    c.U_ItemStatus

или

SELECT *, CASE WHEN Sold2018 = 0 THEN Sold2019 END as new 
FROM (
    SELECT 
        ISNULL(sp.Telephone,'No Sales Employee') as Telephone,
        od.CardCode,
        od.CardName,
        Sum(case when c.U_ItemStatus = '2' then od.DocTotal else 0 end) as Sold2018,
        Sum(case when c.U_ItemStatus = '1' then od.DocTotal else 0 end) as Sold2019     
    FROM
        ORDR od
    Left Join OSLP sp
        On od.SlpCode=sp.SlpCode
    left join RDR1 a on a.DocEntry = od.DocEntry
    left join OITM b on b.ItemCode = a.ItemCode
    left Join OITB c on c.ItmsGrpCod = b.ItmsGrpCod
    Group By
        sp.Telephone,
        od.CardCode,
        od.CardName,
        c.U_ItemStatus
) AS T
1 голос
/ 11 июля 2019

используйте оператор CASE и обратите внимание, что вам нужно использовать все выражение для Sold2018 в условии, а не alias

CASE WHEN Sum(case when c.U_ItemStatus = '2' then od.DocTotal else 0 end) = 0 
     THEN Sum(case when c.U_ItemStatus = '1' then od.DocTotal else 0 end)
     END  AS New
...