根据行数将行中的数据连接到1行

时间:2016-10-18 07:35:19

标签: mysql sql

我有以下表格:

user
userId   name
1        Sam
2        Harold
3        John


othertable
id      id2      number
1       111      12
1       222      23
1       333      33
2       111      12
2       444      11
3       555      12
3       222      44

用户表的userId匹配其他用户的id列。理想情况下,我想根据该ID存在多少行来加入对用户的内容。这是我瞄准的输出:

e.g.
user
    userId   name    111    222   333   444   555
    1        Sam     12     12    33
    2        Harold  12                 11
    3        John           44                12

有什么想法吗?

更新:id2的值有限。仅有效值111,222,333,444和555。

1 个答案:

答案 0 :(得分:0)

你可以尝试这个1 ...不确定它是否符合你的要求......

CREATE TABLE users 
(
    userId int,
    name varchar(max)
) 

INSERT INTO USERS VALUES
(1, 'Sam'),
(2, 'Harold'),
(3, 'John')

CREATE TABLE othertable 
(
    id int,
    id2 int,
    number int
)

INSERT INTO othertable VALUES
(1, 111, 12),
(1, 222, 23),
(1, 333, 33),
(2, 111, 12),
(2, 444, 11),
(3, 555, 12),
(3, 222, 44)

SELECT
    u.userId,
    u.name,
    SUM(CASE WHEN (id2=111) THEN number ELSE 0 END) AS [111],
    SUM(CASE WHEN (id2=222) THEN number ELSE 0 END) AS [222],
    SUM(CASE WHEN (id2=333) THEN number ELSE 0 END) AS [333],
    SUM(CASE WHEN (id2=444) THEN number ELSE 0 END) AS [444],
    SUM(CASE WHEN (id2=555) THEN number ELSE 0 END) AS [555]
FROM othertable o 
INNER JOIN users u ON o.id = u.userId
GROUP BY u.userId, u.name

请试一试。 :)

  

更新:对不起,我对MySQL并不熟悉。但我确实做到了最好   通过将查询更改为子查询,希望这可以帮助您。如果   这不符合你的要求,我希望其他人可以提供帮助   你。

     

更新2:避免使用PIVOT