即使没有可用的数据,我也需要知道如何在表格中保持一个月的标题一整年。例如,当我选择全年的所有项目时,我有这个表:
|Name |Jan |Feb |Mar |Apr |May |Jun |Jul |Aug |Sep |Oct |Nov |Dec |
|Bike | | | | | | |102 |500 |450 |250 |754 |125 |
|Glove |154 |625 |245 |200 |147 |365 |248 |784 |987 |145 |204 |321 |
但是当我只选择一个像(Bike)这样的项目时,结果如下:
|Name |Jul |Aug |Sep |Oct |Nov |Dec
|Bike |102 |500 |450 |250 |754 |125
我需要查看整个表,即使月份数据为空
|Name |Jan |Feb |Mar |Apr |May |Jun |Jul |Aug |Sep |Oct |Nov |Dec |
|Bike | | | | | | |102 |500 |450 |250 |754 |125
感谢您的帮助。
答案 0 :(得分:2)
在数据集查询中,您需要创建一个包含所有月份名称的集合。然后将左边的连接设置为现有数据集。
Select [columns]
From MonthNames as MN
left join Sales as S
on MN.MonthName = S.MonthName
没有数据的月份仍会有记录,但该值将为NULL。确保您使用的是MonthName集中的月份名称字段,而不是Sales集。这将确保您每个月至少有一条记录,即使该月没有销售。
我无法分辨你所有专栏的来源,所以我不得不做出一些假设。将来,在每列前面使用表别名会很有帮助。
试试这个:
SELECT Name,
UnitPrice,
Q1.MONTH,
Q1.MONTH2
FROM TEST.dbo.MonthList AS Q1
LEFT JOIN
( SELECT *,
YEAR(ModifiedDate) AS YEAR
FROM AdventureWorks2012.Sales.SalesOrderDetail AS Q2
INNER JOIN AdventureWorks2012.Production.Product AS Q3
ON Q2.ProductID = Q3.ProductID
WHERE YEAR(ModifiedDate) = @YEAR
AND Name IN ( @NAME )
) AS Q
ON Q1.MONTH2 = MONTH(Q.ModifiedDate)
WHERE Q1.MONTH IN ( @MONTH );
简化版
Select [columns]
From MonthNames as MN
left join (select [columns] from Products Inner join Sales ON ... WHERE [Product & Sales filters]) as S
on MN.MonthName = S.MonthName