这是我的查询,但有一列我不想作为分组依据,但我希望它在 when 条件下使用

This is my query but there is a column I does not want to group by, but I want it to use in when condition

这里我在 case 语句中使用 sr.SourceTransactionType 但我没有 select 它。 但是代码不允许我使用 sr.SourceTransactionType with out group by 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

您可以在aggregate function中使用CASE表达式,如下所示:

替换

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

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

您需要对查询中的其他聚合函数进行相同的更改。