如何在sqlite中一选二选2列?

时间:2018-09-16 15:20:19

标签: sql sqlite

我有一个包含两列(idvalue)的数据库。值有两种类型,每个ID都有这两个值。如何选择此数据库以使其具有三列结果(idvalue1value2

我尝试过CASEGROUP 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的两行都包含所有信息。

4 个答案:

答案 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;