我有一个名为 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
我有一个名为 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
如果类型匹配,您可以使用...
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)
我发现这种技术 - 使用交叉应用和值的组合非常有帮助 - 我从这里得到这个,作者(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)
;
编辑 - 抱歉将别名更改为更合乎逻辑的东西