2017-08-07 54 views
-2

我累了一切,但我無法弄清楚。對你的幫助表示感謝。基本上,我有四列:ID,fst_nm,lst_nm,code和我得到了幾個重複行的結果,因爲一些人有一個以上的代碼。如何將查詢結果轉換爲基於ID或特定列的新列?

這是我得到:

+------+----------+----------+--------+ 
| ID | fst_nm | lst_nm | Code | 
+------+----------+----------+--------+ 
| 987 | BRADLY | MARTIN | LB102 | 
| 987 | BRADLY | MARTIN | LB101 | 
| 999 | DAVID | LOZA | PG102 | 
| 921 | PATRIC | TEST | P5102 | 
| 900 | JUSTIN | MARTIN | P6415 | 
| 900 | JUSTIN | MARTIN | LB105 | 
| 900 | JUSTIN | MARTIN | P1003 | 
| 880 | ROBIN | JURRY | 90686 | 
| 880 | ROBIN | JURRY | 90471 | 
+------+----------+----------+--------+ 

這是我真正想要的:

+------+----------+----------+---------+---------+--------+ 
| ID | fst_nm | lst_nm | Code | Code1 | Code2 | 
+------+----------+----------+---------+---------+--------+ 
| 987 | BRADLY | MARTIN | LB102 | LB101 |  | 
| 999 | DAVID | LOZA | PG102 |   |  | 
| 921 | PATRIC | TEST | P5102 |   |  | 
| 900 | JUSTIN | MARTIN | P6415 | LB105 | P1003 | 
| 880 | ROBIN | JURRY | 90686 | 90471 |  | 
+------+----------+----------+---------+---------+--------+ 

我要讓每一行獨特和移動代碼到新欄目,如果一個人有多個代碼。有沒有辦法做到這一點是SQL或MS訪問?請幫幫我!

+0

是它的MS Access或sql的服務器? –

+0

看起來像msaccess中的pivot/transform,它允許動態數量的列在id,fst_nm,lst_nm上旋轉,然後代碼變成所需列的數量。在MSAccess之外,這需要使用數據透視表的動態SQL來完成。或者如果您的代碼數量有限,則使用行號的case和max語句。 msaccess的https://stackoverflow.com/questions/16691853/transform-and-pivot-in-access-2013-sql。 – xQbert

+0

您正在使用哪種RDBMS? MySQL或SQL服務器或訪問?請正確標記,不能全部爲 –

回答

0

可以如下轉動:

Select * from (
    Select *, RowN = Row_Number() over (partition by id order by Code) from #data) a 
pivot(max(code) for RowN in ([1],[2],[3])) p 
0

試試這個

Select distinct id,fst_nm,lst_nm,(Select Code From mytable t2 
Where t1.ID = t2.id limit 1) as Code, 
(Select Code From mytable t2 Where t1.ID = t2.id limit 1,1) as Code2, 
(Select Code From mytable t2 Where t1.ID = t2.id limit 2,1) as Code3 
From mytable t1 

如果使用的是MSSQL服務器還有一個更棘手的情況

Select distinct id,fst_nm,lst_nm, 
(select top 1 Code From mytable t2 Where t1.ID = t2.Id order by Code), 
(SELECT CODE FROM (
     SELECT 
     CODE,ID, ROW_NUMBER() OVER(ORDER BY CODE) AS ROW 
     FROM mytable t2 Where t1.ID = t2.id 
     ) AS tbl 
     WHERE ROW = 2 
) SECONDCODE, 
(SELECT CODE FROM (
     SELECT 
     CODE,ID, ROW_NUMBER() OVER(ORDER BY CODE) AS ROW 
     FROM mytable t2 Where t1.ID = t2.id 
     ) AS tbl 
     WHERE ROW = 3 
) THIRDCODE 
From mytable t1 
+0

我不斷收到'LIMIT'附近的語法不正確。 –

+0

它工作。非常感謝你的幫助!!! –