2013-10-09 42 views
1

我有一個具有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 
+0

哪些字段名嗎? –

+0

發佈答案似乎不起作用,但通常情況下,您會使用'UNION ALL'。或者,您可以查看「PIVOT/UNPIVOT」,但這可能是矯枉過正。 –

+0

哦 - 他們是字段名稱 - 抱歉。 –

回答

1

我發現這種方法 - 使用交叉組合運用和價值是非常有幫助的 - 我得到這個從here作者(肯尼思費舍爾)在性能的基礎上爭論使用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) 
; 

編輯 - 對不起改變別名到更多的東西邏輯

+0

+1,但你應該重新命名爲'aas,bees,cees'

+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 

這將取決於你是否要過濾接R OUT的結果,您可能希望只顯示在您在所有有值的行...

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