SQL#1は、2013年から特定のパッケージ(パッケージ102)を最初に購入したアカウントを提供するため、(HAVING句を介して)163アカウントを返します。
2013年の会計月ごとに売上を分類したいのですが、[Unique_Fiscal_Month_Label]を列に追加すると、406個のアカウントが表示され、HAVING句は基本的に機能しなくなりました。以下のSQL#2を参照してください。Fiscal_Monthを追加することで、基本的にそのパッケージタイプを購入したことのあるすべてのアカウントが得られる理由について考えてみてください。私はオンラインでチェック条件が役立つかもしれないと読んだが、それを書くのは運が悪かった。
SQL#1
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 [EQMultiplier] > 0 AND ([SC] = 04 OR [SC] = 06 OR [SC] = 07)
AND (substring([SourceCustomerProductCode],8,3) = 102)
AND [Fiscal_Year] IN (2013, 2012)
GROUP BY left([FactActualDetail].[SourceCustomerProductCode],7)
HAVING MIN([Fiscal_Year])=2013
SQL#2
SELECT
sum([FactActualDetail].[CaseAndGallonVolume]) AS [CaseAndGallonVolume],
sum([FactActualDetail].[AdjGrossMarginAmount]) AS [AdjGrossMarginAmount],
left([FactActualDetail].[SourceCustomerProductCode],7) as [Acct #],
[Unique_Fiscal_Month_Label] AS [Unique_Fiscal_Month_Label]
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 [EQMultiplier] > 0 AND ([SC] = 04 OR [SC] = 06 OR [SC] = 07)
AND (substring([SourceCustomerProductCode],8,3) = 102)
AND [Fiscal_Year] IN (2013, 2012)
GROUP BY
left([FactActualDetail].[SourceCustomerProductCode],7),
[Unique_Fiscal_Month_Label]
HAVING MIN([Fiscal_Year])=2013