2016-08-03 76 views
-2

我有一個像轉換多個記錄單記錄使用SQL查詢10個LAC數據

ID    paper_Code   Grade 
----------------------------------------------------------------- 
1    101     A+ 
1    102     B 
1    103     C+ 
2    102     D 
3    103     A 
2    105     B 
.... 

我需要輸出像

Id   P1    P2   P3 
---------------------------------------------------------- 
1   101-A+   102-B   103-C+ 
2   102-D   105-B 
3   103-A 

表感謝您的合作。

+0

是否有你需要它在格式輸出什麼特別的原因?這些數據是如何呈現或使用的? SQL Pivots默認是靜態的,因此您必須在查詢中定義列P1,P2和P3,或者使用動態SQL來執行此操作。 –

+0

查找'PIVOT()',嘗試使用它,並且如果在你嘗試的代碼後發生錯誤。這裏是一個很好的開始http://sqlhints.com/2014/03/18/dynamic-pivot-in-sql-server/ – scsimon

+0

謝謝你marc_s的快速回復。好的樞軸查詢對我來說並不重要。列值應根據特定ID的記錄數量動態發佈。我真正的桌子至少有10張lac唱片和300張紙質代碼。所以,它應該是SQL中的一個動態查詢或函數。提前致謝。 – Hossain

回答

0

假設你的測試數據庫是這樣的:

enter image description here

這裏有選項,你可能感興趣的:

SELECT PaperId, 
    MAX(CASE WHEN Val = '101 A+' THEN Val END) [101 A+], 
    MAX(CASE WHEN Val = '102 B' THEN Val END) [102 B], 
    MAX(CASE WHEN Val = '103 C+' THEN Val END) [103 C+], 
    MAX(CASE WHEN Val = '102 D' THEN Val END) [102 D] 

從紙質 GROUP BY PaperId

enter image description here

另一路:

SELECT Val, 
    MAX(CASE WHEN PaperId = 1 THEN 'yes' END) '1', 
    MAX(CASE WHEN PaperId = 2 THEN 'yes' END) '2', 
    MAX(CASE WHEN PaperId = 3 THEN 'yes' END) '3' 

從紙質 GROUP BY瓦爾

enter image description here

+0

感謝您lucas的快速回復。但是我的第一欄不是論文Id。這是學生證或註冊號或卷號。我真正的桌子至少有10張lac唱片和300張紙質代碼。所以,它應該是SQL中的一個動態查詢或函數。提前致謝。 – Hossain

+0

這是否需要在SQL中完成? C#(作爲例子)是你的朋友,更復雜的解決方案在後端代碼中更容易完成。 – lucas

+0

謝謝你的男人。我爲此解決方案開發了C#代碼。但是對於過程10 lac記錄來說耗費太多時間。所以,我需要Sql解決方案。 – Hossain