0

我有两个表如下:

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

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 始终等于第一个表上的日期。

任何帮助表示赞赏。

4

1 回答 1

0
  1. 使用正确的数据类型存储您的数据。日期应该是日期字段。
  2. 规范化您的数据结构以使查询更容易。
  3. 尝试这个

.

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
于 2013-10-22T13:50:09.997 回答