根据SQL中的某些条件取消数据

时间:2015-08-25 15:20:49

标签: sql-server unpivot

这是我的表格似乎

country     ID      weekyear    W1      W2      W3
------------------------------------------------------------
aa          1000    322015      0.00    4.50    0.00
bb          2000    262015      26.85   5.78    1.23
cc          3000    312015      0.94    0.00    2.90
dd          4000    362015      34.3    4.98    45.00

我必须忽略上表,但这里的挑战是例如:

  • 对于ID = 1000WEEKYEAR表示322015,即2015年的第32周。W1下的下一个值表示第33周和下一周W2下的值表示WEEK 34等等。

  • 同样对于ID = 2000WEEKYEAR表示2015年第26周。因此W1下的下一个值表示第27周,W2下的下一个值是第28周。

请帮助解开表格,表格看起来完全相同/

1 个答案:

答案 0 :(得分:0)

您可以使用CROSS APPLY取消对表格的删除:

SQL Fiddle

SELECT
    t.country,
    t.ID,
    x.WeekYear,
    x.W
FROM tbl t
CROSS APPLY(VALUES
    (WeekYear + 10000, W1),
    (WeekYear + 20000, W2),
    (WeekYear + 30000, W3)
)x(WeekYear, W)

另一种方法是使用UNION ALL

SQL Fiddle

SELECT
    country, ID, WeekYear + 10000 AS WeekYear, W1 AS W
FROM tbl
UNION ALL
SELECT
    country, ID, WeekYear + 20000 AS WeekYear, W2 AS W
FROM tbl
UNION ALL
SELECT
    country, ID, WeekYear + 30000 AS WeekYear, W3 AS W
FROM tbl
ORDER BY country, ID, WeekYear