2016-01-26 2 views
0

У меня есть 2 таблицы, как это:SQL Server - КОГДА - ELSE

  • Таблица CT: Number, CtID, Date, CTIE
  • Таблица VT: Number, VtID, Quantities

И мой код:

SELECT 
    MAX(CT.Date), MAX(CT.CtID), VT.VtID, 
    SUM(VT.Quantities) AS SumVT, 
    CASE 
     WHEN CT.CTIE = 0 THEN SUM(VT.Quantities) 
     ELSE 0 
    END AS IMPORT, 
    CASE 
     WHEN CT.CTIE = 1 THEN SUM(VT.Quantities) 
     ELSE 0 
    END AS EXPORT 
FROM 
    CT 
INNER JOIN 
    VT ON CT.Number = VT.Number 
GROUP BY 
    VT.VtID, CT.CTIE 
ORDER BY 
    VT.VtID 

Этот код работает нормально, но результат не тот, который я хочу. С некоторыми VtID, которые имеют как CTIE = 1, так и CTIE = 1, SQL теперь возвращает 2 отдельных строки с одинаковыми VtID, один для CTIE = 0 и один для CTIE = 1. Но мне нужно, чтобы отобразить только один ряд для каждого VtID вместо 2.

ответ

0

Удалить CT.CTIE в группе и разместить свои заявления случае внутри функции совокупного

SElECT 
    MAX(CT.Date), MAX(CT.CtID), VT.VtID, SUM(VT.Quantities) AS SumVT, 
    SUM(CASE WHEN CT.CTIE = 0 THEN VT.Quantities ELSE 0 END) AS IMPORT, 
    SUM(CASE WHEN CT.CTIE = 1 THEN VT.Quantities ELSE 0 END) AS EXPORT 
FROM CT INNER JOIN VT ON CT.Number=VT.Number 
GROUP BY VT.VtID 
ORDER by VT.VtID 
+0

вау спасибо за вашу помощь. Кстати у меня есть другая версия этого кода, если кто-то хочет узнать: D 'ВЫБОР Temp.VTID, SUM (Temp.Import) AS Import, \t SUM (Temp.Export) AS Экспорт \t FROM (SELECT VTID, Количества, CASE WHEN CT.CTIE = 0 THEN Количества ELSE 0 END AS Import, CASE WHEN CT.CTIE = 1 THEN Количества ELSE 0 END AS Export ОТ VT INNER JOIN CT ON CT.Number = VT. Number) AS Temp \t GROUP BY Temp.VTID.' –

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