透视数据在两个表中?

时间:2013-10-22 12:48:07

标签: sql sql-server sql-server-2008 tsql dynamic-sql

我有两张表如下:

表1

Columns - oppproductid, SKU, Price, Quantity, Date
Values  - PR1, ABCSKU1, 1000,500, 10/2013 

表2

Columns -  opproductid, month_1, Month_2, Month_3, Month_4...Month_36
Values  -  PR1, 200, 100, NULL, 200...

表格为1-1。我需要为month列中的每个值获取一行,对于每个记录都不为null,并根据非空的月份计算日期,假设Month_1是主表中的日期列,因此理想的结果集基于样本值是:

oppproductid  SKU      Price  Quantity  Date      Deployment
PR1           ABCSKU1  1000   500       10/2013   200
PR1           ABCSKU1  1000   500       11/2013   100
PR1           ABCSKU1  1000   500       1/2014    200

备注:

  • Month_3为NULL,因此12/2013不会产生结果。
  • 第二个表中有36个月,唯一要求是必须包含数据。
  • Month_1始终等于第一个表格上的日期。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

  1. 使用正确的数据类型存储数据。日期应该是日期字段。
  2. 规范化您的数据结构,使查询更容易。
  3. 试试这个
  4. set dateformat dmy
    
    select 
        t1.oppproductid,
        t1.SKU,
        t1.Price,
        t1.Quantity,
        dateadd(month, monthno-1, convert(date, '1/' + [date])), 
        deployment
    from table1 t1
        inner join
        (
            select *, convert(int,substring(mth,7,2)) as monthno from table2
                unpivot (deployment for mth in (month_1,month_2,month_3,month_4...)) u
        ) u2
    on t1.oppproductid = u2.opproductid