我有两个表,看起来像这样:
User table Roles table
[id][name] [Userid][value]
1 Tom 1 3
2 Bob 1 4
2 3 我想知道如何让结果看起来像这样:
[id][name][userid1][value1][userid2][value2]
1 Tom 1 3 1 4
2 Bob 2 3 当我请求roles表中的匹配值时。
有没有一种方法可以在不使用游标的情况下做到这一点?
发布于 2016-04-06 19:47:08
您可以使用ROW_NUMBER()分析函数对每个用户的每一行进行编号,然后可以使用聚合函数(即MAX())在同一行中包含多个值:
SELECT u.id,
u.name,
r.value1,
r.value2
FROM users u
LEFT OUTER JOIN
(
SELECT userid,
MAX( CASE rn WHEN 1 THEN value END ) AS value1,
MAX( CASE rn WHEN 2 THEN value END ) AS value2
FROM (
SELECT userid,
value,
ROW_NUMBER() OVER ( PARTITION BY UserID
ORDER BY value ) AS rn
FROM roles
)
GROUP BY userid
) r
ON ( u.id = r.userid )https://stackoverflow.com/questions/36449687
复制相似问题