将值从一个表插入到sql server中具有不同设计的另一个表中

时间:2010-06-23 12:19:18

标签: sql-server

我回到另一个(可能)愚蠢的问题。遗憾。

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

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

现在,我希望结果就像图像的右侧。每月/每年的行数可能虽然现在已经改变了4个。

我正在创建一个临时表:
    声明@TmpTable(id int identity,AnsSum float,AnsMonth int,AnsYear int)
存储图像中的值 - >表格1。但是,我无法弄清楚如何将这些行转换为表2所需的格式。

那么,有什么提示吗? 非常感谢..

ps:我在这里尝试谷歌和相关问题,没有运气 pss:我也没想到确切的答案,我很有兴趣学习新的东西,所以如果你知道我可以在哪里学会这样做,那就是朝着正确的方向前进,这也会很棒!

2 个答案:

答案 0 :(得分:2)

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

SELECT DISTINCT AnaMonth,anayear,[DerivedColumn] FROM @TmpTable A 交叉申请 ( SELECT AnaSum +','FROM @TmpTable B A.AnaMonth = B.AnaMonth AND A.AnaYear = B.AnaYear FOR XML PATH('') )AS C(DerivedColumn)

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

希望这有帮助

答案 1 :(得分:0)

因此,您已对数据进行了规范化,并希望将结果集透视为创建repeating groups

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

我建议不要在SQL中转移此查询。只需对数据库进行查询,每月/每年获得四行。然后在您的应用程序中编写代码,按月/年汇总结果。