2010-11-10 48 views
3

我怎样才能使语句:打开的单柱SQL SELECT结果列表成一行

​​

回报

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

我得到的最好的,到目前为止是与单个列所有值从数据库中提取出来。

+0

你希望得到什么输出? – 2010-11-10 12:14:57

回答

2

你可以做到以下几点:

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

我认为它正在工作,但我实际上得到了SQLError:没有这样的列:b.column2 – relima 2010-11-10 06:28:25

+0

如果我替换为a.column1,b.column1,c.column1,我将得到一个巨大的结果列表。有些东西不适用。 – relima 2010-11-10 06:33:12

+0

如果查询有很多结果:SELECT column1 FROM db WHERE country ='USA'and commodity ='pork。或者其他任何问题,这是复杂的解决方案,你需要旋转桌子,如果你想我,我可以检查如何做到这一点。 – 2010-11-10 21:27:10

2

你可能寻找的GROUP_CONCAT()函数:

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

+0

我确实假设您正在进行某种类型的商品定价,并且对商品/国家/地区组合有独特的限制。如果不是这种情况,您需要使用JOIN提供的其他答案之一。 – AvatarKava 2010-11-10 06:09:27

+0

我明白你的错误,我不清楚。但到目前为止,所提供的解决方案都没有工作 – relima 2010-11-10 06:36:33

0

我相信你正在寻找工作台旋转。我回答了一个类似的问题here但是我不熟悉SQLLite,因此它可能是相似的。

0

喜欢的东西:

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

这与我已有的完全相同:一长串值。我正在寻找并排获取这些值;分三栏。 – relima 2010-11-10 06:32:04

+0

@relima:我的回答不起作用。 mariana soffer给出的答案是正确的。试试看http://www.w3schools.com/Sql/sql_tryit.asp - “SELECT value1.ContactName,value2.ContactName FROM(SELECT ContactName FROM customers WHERE CompanyName ='Centro comercial Moctezuma')as value1, (SELECT ContactName FROM customers WHERE CompanyName ='The Big Cheese')as value2“ – dalle 2010-11-10 10:22:28

+0

如果您的答案不起作用并且对任何人都没有帮助,请删除它。 – Gilles 2011-12-02 17:03:06

1

使用SQL支点。这会帮助你。

1

这是一个演示文稿问题。 更容易让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) 
+0

虽然我通常听到OO程序员要求使用SQL进行set操作,但这是在hte程序中进行处理的一个明确的情况! – 2010-11-10 06:24:53

+0

@詹姆斯安德森:为什么你不想在数据库中解决这个问题? – 2010-11-10 10:43:09

+1

因为SQL解决方案是次优的!它们不会扩展,在SQL中对国家/地区代码进行硬编码是从第1天开始的维护问题。SQL结果的简单Python字典将具有可靠性。 – 2010-11-11 01:25:46

0

你想是这样的:

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

这应该工作(在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 

这是正确的..