将单列多行值转换为多列单值

时间:2016-08-02 17:33:10

标签: sql sql-server

我有一个列L3,如下所示。

L3
---
4
6

现在我想将这两行显示为列,如下所示:

L3  L4
--  --
4    6

请忽略所涉及的任何聚合函数来比较这些数据,因为它们不是任何顺序,数值可能会间歇性地更改。

1 个答案:

答案 0 :(得分:1)

让我们说你只想交替。我会使用LAG()函数来获取先前的行值并跳过行......就像这样

SELECT L3, L4 
FROM (
  SELECT LAG(L3) AS L3, L3 AS L4, ROW_NUMBER() OVER () AS RN
  FROM A_TABLE_YOU_NAME
)
WHERE RN % 2 = 0

SQL Server可能会对没有LAG()的订购感到不满,所以你必须给出一些订单 - 但如果你不在乎只是使用一些东西。确保使用LAG()和ROW_NUMBER()的顺序,否则您将获得“有趣”的结果。

如果您没有LAG()

WITH numbered as (
  SELECT L3, ROW_NUMBER() OVER () AS RN
  FROM A_TABLE_YOU_NAME
)
SELECT B.L3 AS L3, A.L3 AS L4
FROM numbered A
JOIN numbered B ON A.RN = B.RN+1
WHERE A.RN % 2 = 0