【问题标题】:ms SQL join multiple row into multitple columnms SQL将多行加入多列
【发布时间】:2014-01-17 12:05:40
【问题描述】:

我不确定是否使用枢轴,因为我对此感到困惑。我在Fiddle得到了一些样本数据

我正在寻找的结果是(如果为空记录,则为空或空字符串无关紧要)

 Name   Product m1SALES m1STARGET m1GROWTH m2SALES m2STARGET m2GROWTH m3SALES m3STARGET M3GROWTH
 ----------------------------------------------------------------------------------------- 
 John   A 5 100   5        10      100       10       NULL    NULL       NULL
 John    B  NULL    NULL      NULL     NULL    NULL      NULL     20      100    20

我在任何时候都只需要四分之一的记录。 1,2,3 或 4,5,6 或 7,8,9 或 10,11,12。 其中月份+年份取决于数据,可能是某个月份没有销售记录。

我尝试从同一个表中选择取决于月份 + 年份的数据 3 次,但没有运气。

【问题讨论】:

    标签: sql tsql join


    【解决方案1】:

    这有点原始,但无需枢轴即可完成工作:

    SELECT DISTINCT
            name ,
            product ,
            ( SELECT    sales
              FROM      yourtable b
              WHERE     a.product = b.product
                        AND MONTH = 1
                        AND YEAR = 2014
            ) m1sales ,
            ( SELECT    starget
              FROM      yourtable b
              WHERE     a.product = b.product
                        AND MONTH = 1
                        AND YEAR = 2014
            ) m1starget ,
            ( SELECT    growth
              FROM      yourtable b
              WHERE     a.product = b.product
                        AND MONTH = 1
                        AND YEAR = 2014
            ) m1growth ,
            ( SELECT    sales
              FROM      yourtable b
              WHERE     a.product = b.product
                        AND MONTH = 2
                        AND YEAR = 2014
            ) m2sales ,
            ( SELECT    starget
              FROM      yourtable b
              WHERE     a.product = b.product
                        AND MONTH = 2
                        AND YEAR = 2014
            ) m2starget ,
            ( SELECT    growth
              FROM      yourtable b
              WHERE     a.product = b.product
                        AND MONTH = 2
                        AND YEAR = 2014
            ) m2growth ,
            ( SELECT    sales
              FROM      yourtable b
              WHERE     a.product = b.product
                        AND MONTH = 3
                        AND YEAR = 2014
            ) m3sales ,
            ( SELECT    starget
              FROM      yourtable b
              WHERE     a.product = b.product
                        AND MONTH = 3
                        AND YEAR = 2014
            ) m3starget ,
            ( SELECT    growth
              FROM      yourtable b
              WHERE     a.product = b.product
                        AND MONTH = 3
                        AND YEAR = 2014
            ) m3growth
    FROM    yourtable a
    

    【讨论】:

    • 甜!!并且还可以通过添加a.name = b.name,如果列表中出现不同的名称。
    猜你喜欢
    • 1970-01-01
    • 2016-01-14
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 2017-04-24
    相关资源
    最近更新 更多