如何根据2个不同的列值将一行拆分为两行

时间:2016-01-12 07:18:04

标签: sql-server-2008 sql-server-2012

我正在努力完成一些简单的事情,但无法直接思考。我有一个案例,其中1行可以在2个不同的列中具有不同的值。但如果是这样的话,那么这两个值只显示1行,而不是每行显示1行,例如。

  ID    Col1         col2  col3   col4              

46054   2011W3974   164505  1    2

58765   2014W3777   275908  1    NULL

52311   2013W1877   247047  1    NULL

63032   2015W3317   295279  1    NULL

57552   2014W2813   274810  1    NULL

44584   2011W2622   173985  1    2

这需要分为2行,第1行和第6行分为2行,如下所示:

46054   2011W3974   164505  1    NULL
46054   2011W3974   164505  NULL 2
58765   2014W3777   275908  1   NULL
52311   2013W1877   247047  1   NULL
63032   2015W3317   295279  1   NULL
57552   2014W2813   274810  1   NULL
44584   2011W2622   173985  1   NULL
44584   2011W2622   173985  NULL 2

最好的方法是什么?我查看了SPLIT XML函数,但我认为这不会对此有所帮助。我也玩过排名函数,但由于这是2列,我不认为这也可以。请建议

谢谢, RV

2 个答案:

答案 0 :(得分:2)

我恰当地将它们结合在一起:

SELECT Id, Col1, Col2, Col3, NULL AS Col4
FROM <Your Table>
WHERE col4 is NULL

UNION

SELECT Id, Col1, Col2, NULL, Col4
FROM <Your Table>
WHERE Col4 = 2

答案 1 :(得分:0)

只使用Union not union All。

SELECT Id, Col1, Col2, Col3, NULL AS Col4
FROM YourTable
WHERE isnull(Col4 , 0) = 0

UNION

SELECT Id, Col1, Col2, NULL as Col3, Col4
FROM YourTable
WHERE isnull(Col3 , 0) = 0