Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Piviot数据在两个表中?_Sql_Sql Server_Sql Server 2008_Tsql_Dynamic Sql - Fatal编程技术网

Sql Piviot数据在两个表中?

Sql Piviot数据在两个表中?,sql,sql-server,sql-server-2008,tsql,dynamic-sql,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列中的每个值获取一

我有两个表格如下:

表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是主表中的date列,因此基于样本值的理想结果集为:

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
注意事项:

  • 第3个月为空,因此2013年12月不会产生结果
  • 第二个表中有36个月,唯一的要求是必须包含数据
  • 月1始终等于第一张表上的日期
感谢您的帮助

  • 使用适当的数据类型存储数据。日期应为日期字段
  • 规范化数据结构,使查询更容易
  • 试试这个

  • 太棒了!工作得很有魅力。非常感谢。
    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