代码之家  ›  专栏  ›  技术社区  ›  iamserious

在SQL Server中,将一个表中的值插入具有不同设计的另一个表中

  •  0
  • iamserious  · 技术社区  · 16 年前

    我又问了一个(可能)愚蠢的问题。对不起的。

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

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

    现在,我希望结果像图片的右侧一样。每月/每年的行数 可以 现在换4个。

    我正在创建一个临时表,如下所示:
    声明@tmptable(id int identity,anssum float,ansmonth int,ansyear int)
    存储图像中的值-->表1。但是,我不知道如何将这些行转换成表2所要求的格式。

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

    PS:我在这里试着用谷歌搜索和相关的问题,不走运。
    PSS:我也不希望得到确切的答案,我对学习新事物很感兴趣,所以如果你知道在哪里我可以学会做这件事,朝着正确的方向努力,那也太好了!

    2 回复  |  直到 16 年前
        1
  •  2
  •   Baaju    16 年前

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

    从@tmptable a中选择distinct anamonth,anayear,[derivedColumn] 交叉申请 ( 从@tmptable b中选择anasum+',' 其中a.anamonth=b.anamonth 而a.anayear=b.anayear 对于XML路径(“”) )作为C(派生列)

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

    希望这有帮助

        2
  •  0
  •   Bill Karwin    16 年前

    因此,您拥有规范化的数据,并且希望透视要创建的结果集 repeating groups .

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

    I would recommend 在SQL中透视此查询。只需对数据库进行查询,然后每月/每年获取四行。然后在应用程序中编写代码,以按月/年汇总结果。