2010-06-23 45 views
0

我回来了另一个(可能)愚蠢的问题。抱歉。从一个表中插入值到不同的设计在sql server中的另一个表

我有一个非常复杂的查询,它连接4个表格,并根据两个表格中的其他两列计算列的总和。返回的结果是这样的:

Image http://eternalvinay.iocleicester.com/blahblah.png

现在,我想要的结果,像图像的右侧。每月/每年的行数可能虽然现在变为4。

我建立一个临时表为:
声明@TmpTable(ID INT身份,AnsSum浮子,AnsMonth INT,AnsYear INT)
将值从图像存储 - >表1。但是,我不知道如何将这些行转换为表2所要求的格式。

那么,请提供任何提示? 非常感谢..

ps:我试图谷歌和相关的问题在这里,没有运气。
pss:我并不期待确切的答案,我很有兴趣学习新的东西,所以如果你知道我在哪里可以学会做到这一点,一个正确的方向推动,这将是伟大的!

回答

2

您可以使用交叉应用在单个列中获取逗号分隔格式的所有值。而不是“4”不同的列。问题是这个“4”不能每次定义。它可能会增加或减少,建议不要将其作为列。

SELECT DISTINCT AnaMonth,anayear,[DerivedColumn] FROM @TmpTable甲 CROSS APPLY ( SELECT AnaSum + '' FROM @TmpTable乙 WHERE A.AnaMonth = B.AnaMonth AND A.AnaYear = B. AnaYear FOR XML PATH( '') )为C(DerivedColumn)

您将获得[6.0000,1.000,8.0000,5.0000]在5月和2010年等...你可以使用它作为一个列查询任何特定月份的表格。

希望这会有帮助

+0

Aweeesome!这工作像一个魅力!你是个天才! 非常感谢! – iamserious 2010-06-23 13:05:22

0

因此,您已经规范化了数据,并且希望将结果集转为创建repeating groups

您可以使用PIVOT,但是您需要基表中的其他属性来定义四列。

我会推荐不要在SQL中转换此查询。只需对数据库执行查询,并获得每月/每年四行。然后在您的应用程序中编写代码以按月/年汇总结果。

+0

嗯!有趣的是,我现在正在看PIVOT,看起来它可以完成这项工作,但我很好奇你为什么建议为此使用编程语言? 此外,表中的结果已经汇总。所以我不需要再次使用聚合,只需将不同的月/年的行转换为列! – iamserious 2010-06-23 12:31:17

+1

数据透视表无法完成这项工作,因为您的基表中没有属性来确定数据透视表的列。换句话说,你如何定义哪一行进入每一列? – 2010-06-23 12:56:41

+0

感谢您的解释,看起来像我误解了关键! – iamserious 2010-06-23 13:06:13

相关问题