我正在尝试合并两个查询,每个查询共有3个列,我们将其称为Market,Family,Month。
第一个代码告诉我按市场,家庭,月份的总销售额:
SELECT [Market]
,[Family]
, DATEADD(month, DATEDIFF(month, 0, [ActualDate]), 0) AS [StartOfMonth]
, COUNT(*) AS [Sales]
FROM [dbo].[SalesHistory]
GROUP BY [Market], [Family], DATEADD(month, DATEDIFF(month, 0, [ActualDate]), 0)
第二组有4个不同的栏目:
SELECT [Market]
,[Family]
,DATEADD(month, DATEDIFF(month, 0, [Month]), 0) AS [StartOfMonth]
,ISNULL(SUM(CASE WHEN [Version] = 'SOP 17 10'
THEN CAST([Volume] AS INT) END),0) AS [2017 10]
,ISNULL(SUM(CASE WHEN [Version] = 'SOP 17 11'
THEN CAST([Volume] AS INT) END),0) AS [2017 11]
,ISNULL(SUM(CASE WHEN [Version] = 'SOP 17 12'
THEN CAST([Volume] AS INT) END),0) AS [2017 12]
,ISNULL(SUM(CASE WHEN [Version] = 'Budget'
THEN CAST([Volume] AS INT) END),0) AS [Budget]
FROM [Harley-Davidson].[dbo].[ForecastData]
GROUP BY [Market], [Family],DATEADD(month, DATEDIFF(month, 0, [Month]), 0)
我希望它们位于一个包含所有可能的Market,Family,StartOfMonth组合的表中,以及5列,其中相应的值显示零为null。
非常感谢任何和所有帮助!
答案 0 :(得分:1)
如果这不是你想要的,请给我们一个更好的解释
SELECT ISNULL(m1.Market,m2.Market) 'MARKET'
,ISNULL(m1.Family,m2.Family) 'Family'
,ISNULL(m1.StartOfMonth,m2.StartOfMonth) 'StartOfMonth'
,m1.Sales
,m2.[2017 10]
,m2.[2017 11]
,m2.[2017 12]
,m2.Budget
From (
SELECT [Market]
,[Family]
, DATEADD(month, DATEDIFF(month, 0, [ActualDate]), 0) AS [StartOfMonth]
, COUNT(*) AS [Sales]
FROM [dbo].[SalesHistory]
GROUP BY [Market], [Family], DATEADD(month, DATEDIFF(month, 0, [ActualDate]), 0)
) m1
FULL OUTER JOIN
(
SELECT [Market]
,[Family]
,DATEADD(month, DATEDIFF(month, 0, [Month]), 0) AS [StartOfMonth]
,ISNULL(SUM(CASE WHEN [Version] = 'SOP 17 10'
THEN CAST([Volume] AS INT) END),0) AS [2017 10]
,ISNULL(SUM(CASE WHEN [Version] = 'SOP 17 11'
THEN CAST([Volume] AS INT) END),0) AS [2017 11]
,ISNULL(SUM(CASE WHEN [Version] = 'SOP 17 12'
THEN CAST([Volume] AS INT) END),0) AS [2017 12]
,ISNULL(SUM(CASE WHEN [Version] = 'Budget'
THEN CAST([Volume] AS INT) END),0) AS [Budget]
FROM [Harley-Davidson].[dbo].[ForecastData]
GROUP BY [Market], [Family],DATEADD(month, DATEDIFF(month, 0, [Month]), 0)
) m2
on m1.market = m2.market
and m1.family = m2.family
and m1.StartOfMonth = m2.StartOfMonth