Как сделать 2 столбца из одного в одном select в sqlite? - PullRequest
0 голосов
/ 16 сентября 2018

У меня есть одна база данных с двумя столбцами (id и value). Существует два типа значений, и каждый идентификатор имеет оба этих значения. Как сделать выбор в этой базе данных, чтобы в результате было три столбца (id, value1 и value2)

Я пробовал CASE и GROUP BY, но он показывает только один результат каждого идентификатора

Пример БД:

| id | value |  
|  0 | a     |  
|  0 | b     |  
|  1 | a     |  
|  1 | b     |  

Пример результата, который я ищу:

| id | value_a | value_b |  
| 0  | a       | b       |  
| 1  | a       | b       |  

UPDATE:

Как было отмечено в комментариях, в примере слишком простые данные.

Проблема сложнее
Пример, который лучше описал бы это:

DB:

| 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       |   

Вывод должен быть отсортирован по идентификатору и иметь всю информацию из обеих строк каждого идентификатора.

Ответы [ 4 ]

0 голосов
/ 17 сентября 2018

Спасибо всем за ответы!Вот как я это сделал:

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;
0 голосов
/ 16 сентября 2018
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';
0 голосов
/ 16 сентября 2018

Я использовал этот метод, чтобы превратить «строки» в «столбцы». В зависимости от количества уникальных value s, которые существуют в таблице, вы можете или не можете использовать это:)

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;
0 голосов
/ 16 сентября 2018

Если всегда есть два значения для идентификатора, вы можете попробовать агрегацию, используя min() и max().

SELECT id,
       min(value) value_a,
       max(value) value_b
       FROM elbat
       GROUP BY id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...