我有以下表格:
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。
答案 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