2017-08-07 27 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

它工作。非常感谢你的帮助!!! –