2014-02-12 75 views
-1

我有場景,需要將行轉換爲列,但是我們沒有每個客戶的固定行數,這取決於他/她有多少字段根據那些行將在表中創建的值輸入值。假設我們在表單上有15個字段,然後他/她只填寫13個字段,那麼只有13行將爲該客戶創建值,如果某個客戶填寫了所有15個字段,那麼我將爲該客戶在該表中有15個行。在SQL SERVER中將列轉換爲不同的行數

請問我可以如何在這個不同的行列表上編寫查詢,以及如何編寫sql查詢以將所有行轉換爲具有單個查詢的列。

 
Sample Data: 
Id  EntityId Key  Value 
1   1  Fname  john 
2   1  lname  smith 
3   1  city  nyc 
4   1  state  ny 
5   1  degree  MBA 
6   2  Fname  john 
7   2  lname  smith 
8   2  city  nyc 
9   2  state  ny 

如果你看到上面的數據,ENTITYID = 1有5條記錄,2只4

感謝

+1

這個問題似乎是脫離主題,因爲它是要求代碼。要求提供代碼的問題必須通過展示嘗試的代碼或研究來展示最小的努力。 StackOverflow中存在許多類似的問題,主題是「行到列」。這些問題將顯示如何使用動態SQL和pivot。 – Kermit

回答

1

測試數據

DECLARE @MyTable TABLE (Id INT,EntityId INT,[Key] VARCHAR(20),Value VARCHAR(20)) 
INSERT INTO @MyTable VALUES 
(1,1,'Fname' ,'john'), 
(2,1,'lname' ,'smith'), 
(3,1,'city' ,'nyc'), 
(4,1,'state' ,'ny'), 
(5,1,'degree','MBA'), 
(6,2,'Fname' ,'john'), 
(7,2,'lname' ,'barbar'), 
(8,2,'city' ,'Mexico city'), 
(9,2,'state' ,'MC') 

查詢

SELECT * 
FROM 
(
SELECT EntityId, [Key],Value FROM @MyTable)t 
PIVOT(MIN(Value) 
     FOR [Key] 
     IN ([Fname],[lname],[city],[state],[degree]) 
    )p 

結果集

╔══════════╦═══════╦════════╦═════════════╦═══════╦════════╗ 
║ EntityId ║ Fname ║ lname ║ city  ║ state ║ degree ║ 
╠══════════╬═══════╬════════╬═════════════╬═══════╬════════╣ 
║  1 ║ john ║ smith ║ nyc   ║ ny ║ MBA ║ 
║  2 ║ john ║ barbar ║ Mexico city ║ MC ║ NULL ║ 
╚══════════╩═══════╩════════╩═════════════╩═══════╩════════╝