我已经搜索并尝试过,但是没有找到我要查找的确切SQL代码示例。我每个帐户有多个代表(行),需要将它们分散成列。每个帐户最多可以有3个。
我的源数据如下:
{
"presets": [
[
"env",
{
"modules": false,
"targets": {
"browsers": "> 1%",
"uglify": true
},
"useBuiltIns": true
}
],
"react",
"es2015"
],
"plugins": [
"syntax-dynamic-import",
"transform-object-rest-spread",
[
"transform-class-properties",
{
"spec": true
}
]
]
}
我需要它看起来像这样:
+---------+-------+------+
| Account | Badge | Name |
+---------+-------+------+
| 123 | 456 | Bob |
| 123 | 789 | John |
| 123 | 654 | Carl |
+---------+-------+------+
非常感谢您的帮助。
答案 0 :(得分:3)
您可以尝试一下。
如果您的DBMS支持ROW_NUMBER
和窗口函数,请在子查询中输入行号,然后执行条件聚合函数make pivot
CREATE TABLE T(
Account INT,
Badge INT,
Name VARCHAR(50)
);
INSERT INTO T VALUES (123,456,'Bob');
INSERT INTO T VALUES (123,789,'John');
INSERT INTO T VALUES (123,654,'Carl');
查询1 :
SELECT Account,
MAX(CASE WHEN rn = 1 THEN Badge end) Badge1,
MAX(CASE WHEN rn = 1 THEN Name end) Name1,
MAX(CASE WHEN rn = 2 THEN Badge end) Badge2,
MAX(CASE WHEN rn = 2 THEN Name end) Name2,
MAX(CASE WHEN rn = 3 THEN Badge end) Badge3,
MAX(CASE WHEN rn = 3 THEN Name end) Name3
FROM
(
SELECT *,ROW_NUMBER() OVER(ORDER BY Account) rn
FROM T
) t1
GROUP BY Account
Results :
| Account | Badge1 | Name1 | Badge2 | Name2 | Badge3 | Name3 |
|---------|--------|-------|--------|-------|--------|-------|
| 123 | 456 | Bob | 789 | John | 654 | Carl |