如何从单行创建多个行

时间:2013-10-09 10:44:44

标签: sql sql-server sql-server-2008 tsql

我有一个名为result的表,它有11列,看起来像

Name Seat FA1 FA2 Fa3 FB1 FB2 FB3 FC1 FC2 FC3

我要做的是将每行分成3行,这样行就可以像这样

Name Seat FA1 FB1 FC1

Name Seat FA2 FB2 FC2

Name Seat FA3 FB3 FC3

2 个答案:

答案 0 :(得分:1)

如果类型匹配,您可以使用...

SELECT Name, Seat, FA1, FB1, FC1 from result

UNION ALL

SELECT Name, Seat, FA2, FB2, FC2 from result

UNION ALL

SELECT Name, Seat, FA3, FB3, FC3 from result

这取决于您是否要过滤掉结果,您可能只希望显示所有值中包含值的行...

SELECT Name, Seat, FA1, FB1, FC1 
from result
WHERE (FA1 IS NOT NULL AND FB1 IS NOT NULL AND FC1 IS NOT NULL)

答案 1 :(得分:1)

我发现这种技术 - 使用交叉应用和值的组合非常有用 - 我从here得到了这一点,作者(Kenneth Fisher)在性能方面对使用unpivot进行了辩论。我最喜欢的是它提供的布局控制的简易性,并认为它比unpivot更容易。它将在SQL 2008中运行。

SELECT
    Name
  , Seat
  , CA1.Aaisle
  , CA1.Baisle
  , CA1.Caisle
FROM UnPivotMe
CROSS APPLY (
    VALUES 
                (FA1, FB1, FC1)
              , (FA2, FB2, FC2)
              , (FA3, FB3, Fc3)
            ) AS CA1 (Aaisle, Baisle, Caisle)
;

编辑 - 抱歉将别名更改为更符合逻辑的内容