2016-01-12 32 views
-2

我有以下結構的SQL表數據:SQL Server行的列

Engine_No Date Process Bolt_No1 B1Value1 B1Value2 B1Value3 Bolt_No2 B2Value1 B2Value2 B2Value3 Bolt_No3 B3Value1 B3Value2 B3Value3 Bolt_No4 B4Value1 B4Value2 B4Value3 

我想顯示查詢的結果如下:

SR NO Engine_No Date Process B1Bolt_No1 B1Value1 B1Value2 B1Value3   
SR NO Engine_No Date Process B2Bolt_No2 B2Value1 B2Value2 B2Value3 
SR NO Engine_No Date Process B3Bolt_No3 B3Value1 B3Value2 B3Value3 
SR NO Engine_No Date Process B4Bolt_No4 B4Value1 B4Value2 B4Value3 

可有人建議查詢達到這個目標?

+0

SQL表中的列是唯一的。你的數據結構沒有意義。 –

+0

您可能能夠使用PIVOT或case語句以您想要的格式輸出。然而,所提供的示例表具有重複的字段名稱,值1,值2和值3全部被使用4次。提供表格的詳細信息以及迄今爲止嘗試過的查詢。 – HardLeeWorking

回答

0

如果您改變了列名像這樣

Engine_No Date Process Bolt_No1 B1Value1 B1Value2 B1Value3 
         Bolt_No2 B2Value1 B2Value2 B2Value3 
         Bolt_No3 B3Value1 B3Value2 B3Value3 
         Bolt_No4 B4Value1 B4Value2 B4Value3 

你會質疑這樣的:

  SELECT Engine_No,Date,Process,Bolt_No1 AS BoltNo,B1Value1 AS Value1,B1Value2 AS Value2,B1Value3 AS Value3 FROM YourTable 
UNION ALL SELECT Engine_No,Date,Process,Bolt_No2,B2Value1,B2Value2,B2Value3 FROM YourTable 
UNION ALL SELECT ... 
+0

我想要行列數據 –

+0

@AmolBotikar,你試過這個嗎?你還期望得到什麼? – Shnugo

2

假設值實際上是存儲在有效的列名,那麼最簡單的方法是使用union all。然而,更多的表演方式是逆透視或cross apply

select t.Engine_No, t.Date, t.Process, b.Bolt_No, b.Value1, b.Value2, b.Value3 
from t cross apply 
    (values (Bolt_No1, Value1_1 Value1_2 Value1_3), 
      (Bolt_No2, Value2_1 Value2_2 Value2_3), 
      (Bolt_No3, Value3_1 Value3_2 Value3_3), 
      (Bolt_No4, Value4_1 Value4_2 Value4_3) 
    ) b(Bolt_No, Value1 Value2 Value3); 

我不知道什麼是SR NO。數據中沒有提及。

+0

高級沒有沒有要求 –