0

特定の製品(SourceCustomerProductCode = 102)を販売しているアカウントのリストを返そうとしており、2013年にこの製品を販売したアカウントを確認したいのですが、2012年に販売した場合は、除外してほしいです。クエリ(つまり、新しい顧客のみを返したい)。以下のクエリは、2013年にこの製品を販売したアカウントを返していますが、2012年にこの製品を販売したアカウントも含まれています。

[CaseAndGalloneVolume]ステートメントの場合はcaseを使用してSELECT領域にこれを記述できることはわかっていますが、最終的には他の製品をテーブルに追加するため、where句にこのステートメントを記述する必要があります。

助けてくれてありがとう!

SELECT 

sum([FactActualDetail].[CaseAndGallonVolume]) AS [CaseAndGallonVolume],
sum([FactActualDetail].[AdjGrossMarginAmount]) AS [AdjGrossMarginAmount],
left([FactActualDetail].[SourceCustomerProductCode],7) as [Acct #]

FROM [dbo].[FactActualDetail] [FactActualDetail] 

LEFT JOIN [dbo].[DimCustomer] [DimCustomer] ON ([FactActualDetail].[CustomerSK] [DimCustomer].[CustomerSK])
LEFT JOIN [Common].[DimDate] [DimDate] ON ([FactActualDetail].[DeliveryDateSK] = [DimDate].[DateSK])

WHERE [Fiscal_Year] = 2013 AND [EQMultiplier] > 0 AND ([SuperChannelCode] = 04 OR [SuperChannelCode] = 06 OR [SuperChannelCode] = 07) AND (substring([SourceCustomerProductCode],8,3) = 102) 

GROUP BY left([FactActualDetail].[SourceCustomerProductCode],7)
4

2 に答える 2

0

新しい集計列を追加します。

sum(case when year = 2013 then 1 else 0 end) as invalidItemCount

そしてそれをフィルタリングします:

having invalidItemCount = 0

これは、2013年だけでなく、任意のフィルター式に対して機能します。

于 2013-03-08T17:45:19.677 に答える