我有一个包含两列(id
和value
)的数据库。值有两种类型,每个ID都有这两个值。如何选择此数据库以使其具有三列结果(id
,value1
和value2
)
我尝试过CASE
和GROUP BY
,但每个ID仅显示一个结果
数据库示例:
| id | value |
| 0 | a |
| 0 | b |
| 1 | a |
| 1 | b |
我想要的结果示例是:
| id | value_a | value_b |
| 0 | a | b |
| 1 | a | b |
更新:
正如评论中指出的那样,示例中的数据太简单了。
问题比较复杂
一个更好地描述它的示例:
数据库:
| id | value | value2 | value3 |
| 0 | a | a2 | a3 |
| 0 | b | b2 | b3 |
| 1 | a | c2 | c3 |
| 1 | b | d2 | d3 |
结果:
| id | value_a | value_b | value2_a | value2_b | value3_a | value3_b |
| 0 | a | b | a2 | b2 | a3 | b3 |
| 1 | a | b | c2 | d2 | c3 | d3 |
输出应按ID排序,并且每个ID的两行都包含所有信息。
答案 0 :(得分:1)
如果每个ID总是有两个值,则可以尝试使用min()
和max()
进行汇总。
SELECT id,
min(value) value_a,
max(value) value_b
FROM elbat
GROUP BY id;
答案 1 :(得分:0)
select t0.id,t0.Value as Value_A, t1.Value as Value_B
from test t0
inner join test t1 on t0.id = t1.id
where t0.Value = 'a' and t1.value = 'b';
答案 2 :(得分:0)
我已经使用这种方法将“行”变成“列”。根据表中存在的唯一value
的数量,您可能会或可能不想使用:)
SELECT id, SUM(CASE WHEN value = "a" then 1 else 0 END) value_a,
SUM(CASE WHEN value = "b" then 1 else 0 END) value_b,
SUM(CASE WHEN value = "c" then 1 else 0 END) value_c,
SUM(CASE WHEN value ="a2" then 1 else 0 END) value_a2,
.
.
.
FROM table
GROUP BY id;
答案 3 :(得分:0)
谢谢大家的回答!这就是我这样做的方式:
WITH a_table AS
(
SELECT id, value, value2, value3 FROM table1 WHERE table1.value = 0
),
b_table AS
(
SELECT id, value, value2, value3 FROM table1 WHERE table1.value = 1
)
SELECT DISTINCT
a_table.id AS id,
a_table.value AS value_a,
a_table.value2 AS value2_a,
a_table.value3 AS value3_a,
b_table.value AS value_b,
b_table.value2 AS value2_b,
b_table.value3 AS value3_b
FROM a_table
JOIN b_table ON a_table.id = b_table.id
GROUP BY id;