Превратить список результатов SQL SELECT из одного столбца в одну строку - PullRequest
3 голосов
/ 10 ноября 2010

Как мне сделать заявление:

SELECT column1 FROM db WHERE country in ('USA','BRA','CHN') and commodity='pork'

возвращение

value1, value2, value3 (where value1 is for USA, value2 for BRA, value3 for CHN)

Лучшее, что я получил до сих пор, - это один столбец, в котором все значения отображаются по мере их извлечения из базы данных.

Ответы [ 9 ]

2 голосов
/ 10 ноября 2010

Вы можете сделать следующее:

Select a.column1,b.column2,c.column3 from
(SELECT column1 FROM db WHERE country ='USA' and commodity='pork') as a,
(SELECT column1 FROM db WHERE country ='BRA' and commodity='pork') as b,
(SELECT column1 FROM db WHERE country ='CHN' and commodity='pork') as c
2 голосов
/ 10 ноября 2010

Возможно, вы ищете функцию GROUP_CONCAT ():

http://www.sqlite.org/lang_aggfunc.html

1 голос
/ 10 ноября 2010

Это вопрос презентации. Проще позволить Python справиться с этим:

import sqlite3
conn = sqlite3.connect('/path/to/your.db')
curs = conn.cursor()
results = curs.execute("""SELECT column1 
                            FROM db 
                           WHERE country in ('USA','BRA','CHN') 
                             AND commodity='pork';""").fetchall()
', '.join(str(result[0]) for result in results)
1 голос
/ 10 ноября 2010

Используйте sql pivot.Это поможет вам.

0 голосов
/ 23 июля 2013

Это должно работать (проверено в mysql)

SELECT GROUP_CONCAT(column1) FROM db WHERE country in ('USA','BRA','CHN') and commodity='pork'

мое тестирование это (в MySQL)

SELECT GROUP_CONCAT( uid )  FROM pages where title in ('Home','Footer','home')

результат:

1,3,10

это правильно ..

0 голосов
/ 10 ноября 2010
   select max(case country
                 when 'USA' then column1
                 else null
               end) USA,
           max(case country
                 when 'BRA' then column1
                 else null
               end) BRA,
           max(case country
                 when 'CHN' then column1
                 else null
               end) CHN
    FROM db
    WHERE country in ('USA','BRA','CHN')
     and commodity='pork'

Один проход данных (один запрос), и вы объединяете три строки, другими словами, ничего.

0 голосов
/ 10 ноября 2010

Вы хотите что-то вроде этого:

select 
  base.commodity
,USA_db.column1 as Commodity_USA
,BRA_db.column1 as Commodity_BRA
,CHN_db.column1 as Commodity_CHA
from (select 'pork' as commodity) as base
left join db as USA_db on base.commodity = USA_db.commodity and USA_db.country = 'USA'
left join db as BRA_db on base.commodity = BRA_db.commodity and BRA_db.country = 'BRA'
left join db as CHN_db on base.commodity = CHN_db.commodity and CHN_db.country = 'USA'
;

Вывод будет:

commodity   Commodity_USA  Commodity_BRA  Commodity_CHA
----------  -------------  -------------  -------------
pork        USA-pork       BRA-pork       USA-pork
0 голосов
/ 10 ноября 2010

Что-то вроде:

SELECT column1 as value1 FROM db WHERE country='USA' and commodity='pork'
UNION
SELECT column1 as value2 FROM db WHERE country='BRA' and commodity='pork'
UNION
SELECT column1 as value3 FROM db WHERE country='CHN' and commodity='pork'
0 голосов
/ 10 ноября 2010

Я полагаю, вы ищете Поворот таблицы.Я ответил на аналогичный вопрос здесь Однако я не знаком с SQLLite, поэтому он может быть похожим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...