Это мой запрос, но есть столбец, по которому я не хочу группировать, но я хочу, чтобы он использовался в when condition

#sql #case

#sql #случай

Вопрос:

Здесь я использую sr.SourceTransactionType в операторе case, но я его не выбираю. Но код не позволяет мне использовать sr.SourceTransactionType без группы по sr.SourceTransactionType, поэтому, пожалуйста, дайте мне предложения

 BEGIN
    SELECT it.Description AS ItemType
        ,iv.ItemCode
        ,iv.Description AS ItemName
        ,un.Description AS Unit
        ,CASE 
            WHEN sr.SourceTransactionType = 'OBL'
                THEN SUM(sr.Quantity)
            END AS 'OBLQTY'
        ,CASE 
            WHEN sr.SourceTransactionType = 'OBL'
                THEN SUM(sr.Quantity * sr.UnitRate)
            END AS 'OBLAMOUNT'
        ,CASE 
            WHEN sr.SourceTransactionType = 'GRND'
                THEN SUM(sr.Quantity)
            END AS 'GRNQTY'
        ,CASE 
            WHEN sr.SourceTransactionType = 'GRND'
                THEN SUM(sr.Quantity * sr.UnitRate)
            END AS 'GRNAMOUNT'
        ,CASE 
            WHEN sr.SourceTransactionType = 'RCPT'
                THEN SUM(sr.Quantity)
            END AS 'RCPTQTY'
        ,CASE 
            WHEN sr.SourceTransactionType = 'RCPT'
                THEN SUM(sr.Quantity * sr.UnitRate)
            END AS 'RCPTAMOUNT'
        ,SUM(sr.IssuedQuantity) AS IssuedQty
        ,SUM(sr.IssuedQuantity * sr.UnitRate) AS IssuedAmount
        ,SUM(sr.IssueReturnQuantity) AS IssRtnQty
        ,SUM(sr.IssueReturnQuantity * sr.UnitRate) AS IssRtnAmount
        ,SUM(sr.DispatchedQuantity) AS DispatchQty
        ,SUM(sr.DispatchedQuantity * sr.UnitRate) AS DispatchAmount
    FROM [dbo].[sms_StockRegister] sr
    INNER JOIN [dbo].[sms_ItemVersion] iv ON sr.ItemId = iv.ItemId
    INNER JOIN [dbo].[cmn_ItemType] it ON iv.ItemTypeId = it.ItemTypeId
    INNER JOIN [dbo].[cmn_Unit] un ON iv.UnitId = un.UnitId
    GROUP BY iv.Description,it.Description,iv.ItemCode
             ,ac4.AccountCodeGN4Code,un.Description
    ORDER BY iv.Description
END
 

Комментарии:

1. Какое сообщение об ошибке, если есть? Можете ли вы включить примеры данных, которые помогут объяснить проблему, с которой вы столкнулись здесь?

Ответ №1:

Вы можете использовать CASE выражение в aggregate function следующем:

Заменить

 CASE WHEN sr.SourceTransactionType = 'OBL' THEN SUM(sr.Quantity) END AS 'OBLQTY'
 

с

 SUM(CASE WHEN sr.SourceTransactionType = 'OBL' THEN sr.Quantity END) AS 'OBLQTY'
 

Вам нужно изменить то же самое в других агрегатных функциях в вашем запросе.

Комментарии:

1. Если это решило вашу проблему, вы можете пометить этот вопрос как принятый, чтобы этот вопрос был помечен как решенный.