2010-11-10 41 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 

這是正確的..