#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. Если это решило вашу проблему, вы можете пометить этот вопрос как принятый, чтобы этот вопрос был помечен как решенный.