![]() |
1
4
case语句是我最好的SQL朋友。您还需要一个时间表来生成两个月的0收入。 假设基于下表的可用性:
和
示例1不带空行:
返回:
示例2:空行: 我将使用子查询(但其他查询可能不会),并将为每个产品和年-月组合返回一个空行。
返回:
请注意,大多数报告工具都会实现这个交叉表或矩阵功能,现在我认为SQL Server 2005也有透视语法可以实现这个功能。 这里有一些额外的资源。 案例 http://www.4guysfromrolla.com/webtech/102704-1.shtml SQL Server 2005透视 http://msdn.microsoft.com/en-us/library/ms177410.aspx |
![]() |
2
3
@克里斯蒂安——降价编辑——啊,尤其是当你的文章的预览和最终版本不一致的时候…… @Christian——完全外部联接——完全外部联接被这样一个事实所推翻:在WHERE子句中有对SP1的引用,并且在联接之后应用WHERE子句。要对其中一个表进行完全外部联接和筛选,需要将WHERE子句放入子查询中,以便进行筛选。 之前 在join中,或者尝试在join on子句中构建所有的where条件,这是非常丑陋的。好吧,事实上没有什么好办法。 @乔纳斯:考虑到这一点:
事实上,这项工作不能用一个漂亮的查询来完成,我肯定会尝试得到你真正想要的结果。有一个丑陋的查询,甚至没有得到你真正想要的确切数据,这是没有意义的。;)
因此,我建议分5个步骤进行:
当然,我想我是在假设您可以创建一个存储过程来实现这一点的基础上工作的。从技术上讲,您可能能够以内联方式运行整个批处理,但这种丑陋的情况很少出现。如果您不能创建一个SP,我建议您通过子查询重新进行完整的外部联接,但是当一个月的任何一年都没有销售额时,它不会给您带来任何影响。 |
![]() |
3
1
关于减价-是的,这很令人沮丧。编辑器确实预览了我的HTML表,但是在发布之后,它就不见了——所以必须从发布中删除所有HTML格式… @我想我们已经得出了相似的结论。这个查询很容易变得很难看。实际上,我在阅读你的答案之前,用了一种类似的(但又不同的方法)解决了这个问题。我可以在报表数据库上创建存储过程和函数。我创建了一个表值函数,接受一个产品类别和一个财政年度作为参数。在此基础上,函数将填充一个包含12行的表。如果有任何可用的销售,这些行将用视图中的数据填充,如果没有,则该行将有0个值。 然后,我连接函数返回的两个表。因为我知道所有的表都有12个rove,所以分配更容易,我可以加入产品类别和月份:
我认为你的方法可能更干净一点,因为财务分析功能相当混乱!但至少它起作用了——这让我现在很高兴;) |
![]() |
4
1
诀窍是进行完全联接,使用isNull从两个表中获取联接列。我通常将它包装成一个视图或派生表,否则您还需要在WHERE子句中使用ISNULL。
这将使你达到你的最低要求——与2007年或2008年的销售额或两者都有关系。要获取任何一年都没有销售的行,只需内部联接到1-12数字表(需要 have one of those 是吗?). |
![]() |
5
0
我可能是错的,但您不应该使用完整的外部联接而不仅仅是左联接吗?这样,您将从两个表中获取“空”列。 |
![]() |
6
0
使用Pivot和动态SQL,我们可以实现这个结果
结果
|
![]() |
Duvan · 将逗号(,)替换为点(.)[副本] 2 年前 |
![]() |
Mateen Bagheri · 选择表的计数并选择其自身 2 年前 |
![]() |
SoT · SQL Server中求和函数的工作方式 2 年前 |
![]() |
NKAT · 将列值聚合到列表中会产生错误 2 年前 |
![]() |
deanpillow · 返回两列中有一个匹配值的记录 2 年前 |
![]() |
snowflakes74 · 在Dapper中异步查询多个结果 2 年前 |