Разделить итоговое значение на два столбца в SQL Server - PullRequest
1 голос
/ 09 октября 2019

Я пытаюсь разделить значение «общего итога» на два столбца в моем запросе, но сохраняю одну строку в результатах. В настоящее время я использую два разных оператора CASE для этого, но в итоге создается две строки для каждого результата - каждый из которых содержит NULL. Можно ли как-то это сделать и вернуть только одну строку результатов с общим итогом, разделенным по указанным условиям?

Например, у меня есть материал, у которого количество «Пустое кол-во» составляет 38 единиц, а «Непокрытое количество» - 8 единиц, что в сумме составляет 46. Я хотел бы видеть это в одном ряду, но скод ниже я получаю две строки для этого материала - по одной для каждого типа кол-во. Я изучил PIVOT, но, похоже, это не сработает.

CASE
        WHEN MRP.STOCK_TYPE = 'A'
        THEN SUM(MRP.QUANTITY) 
        END AS 'Uncovered Qty', 
    CASE WHEN MRP.STOCK_TYPE <> 'A'
        THEN SUM(MRP.QUANTITY)
        END AS 'Blank Qty'

возвращает:

одна строка со значением 'uncovered qty' = NULL и 'blank qty' = 38, одна строка со значением 'uncovered qty = 8 and' blankqty = NULL

Есть ли способ заставить это вернуться в одну строку и избежать NULL

Ответы [ 2 ]

1 голос
/ 09 октября 2019

добавьте isnull() в свой подзапрос, чтобы вернуть 0 для нулей и sum() результаты снова.

select sum(t1.[Uncovered Qty]) as [Uncovered Qty], sum(t1.[Blank Qty]) as [Blank Qty]
from (select 
        CASE WHEN MRP.STOCK_TYPE = 'A'
        THEN ISNULL(SUM(MRP.QUANTITY), 0) 
        END AS 'Uncovered Qty', 

        CASE WHEN MRP.STOCK_TYPE <> 'A'
        THEN ISNULL(SUM(MRP.QUANTITY), 0)
        END AS 'Blank Qty'
        from table) t1
1 голос
/ 09 октября 2019

Вы можете ввести условие в SUM s, и это даст вам оба значения в одной строке:

SUM (CASE WHEN MRP.STOCK_TYPE  = 'A' THEN MRP.QUANTITY ELSE 0 END) AS 'Uncovered Qty', 
SUM (CASE WHEN MRP.STOCK_TYPE <> 'A' THEN MRP.QUANTITY ELSE 0 END) AS 'Blank Qty'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...