这是我的查询,但有一列我不想作为分组依据,但我希望它在 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'
您需要对查询中的其他聚合函数进行相同的更改。
这里我在 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'
您需要对查询中的其他聚合函数进行相同的更改。