2013-04-03 35 views
0

您好,我正在尋求幫助,我的查詢當前運行沒有錯誤,但不顯示數據,因爲我也需要它。我的表存儲電話號碼,相關字段是id,phonetype和phonenumber。如果將行選擇爲多列

運行時,雖然它只顯示最後一個數字,但它會按預期方式返回列id,HOME PHONE,WORK PHONE,CELL PHONE。假設在給定行中有家庭電話和工作電話號碼...我只在該工作電話的WORK PHONE列中獲取數據。如果連續存在家庭電話,工作電話和手機...我只能在CELL PHONE列中獲取數據。

我需要在phonetype類型的唯一列中給定id的所有電子形式的一行。我希望是有道理的,如果沒有查詢應該給你一個想法是什麼即時尋找...感謝

SELECT id, 
(IF(phonetype = 'HOME PHONE', phonenumbers.phonenumber, '')) AS 'HOME PHONE', 
(IF(phonetype = 'WORK PHONE', phonenumbers.phonenumber, '')) AS 'WORK PHONE', 
(IF(phonetype = 'CELL PHONE', phonenumbers.phonenumber, '')) AS 'CELL PHONE' 
FROM phonenumbers 
GROUP BY id; 

表我查詢看起來像這樣

id | name | phonetype | phonenumber 

1 | Jim | HOME PHONE | 0000000001   
1 | Jim | WORK PHONE | 0000000002 
2 | Kim | HOME PHONE | 0000000003 
2 | Kim | WORK PHONE | 0000000004 
2 | Kim | CELL PHONE | 0000000005 

結果我我想找應該是這樣的......

id | name | home phone | work phone | cell phone 

1 | Jim | 0000000001 | 0000000002 | 
2 | Kim | 0000000003 | 0000000004 | 0000000005 
+1

如果你有一個類型的話,如何能有一個工作電話和一個GIVEN行的手機?如果類型='WORK PHONE',它又怎麼可能是'CELL PHONE'?看看這個查詢並想象你的數據庫,我會假設每行生成的行將填充一列,其他兩列空白。 – 2013-04-03 22:38:25

+0

我看到我在哪裏創建混亂,表中有每行人的多行phonetypes。所以Jim有自己的工作,家庭和單元號碼。 – user2242491 2013-04-03 22:41:31

+0

沒有混淆,這正是我對它的理解,但是隨後你將得到Jim的多行結果,並且每行仍然只有一個值填充。我認爲你希望合併這些個體行成單行結果,你可以用subseconds按照d'alar'cop的回答做 – 2013-04-03 22:48:02

回答

1

假定每個ID都有反對每種類型的只有一個電話號碼:

SELECT a.id, 
(SELECT phonenumbers.phonenumber FROM phonenumbers WHERE phonetype = 'HOME PHONE' AND id = a.id) AS 'HOME PHONE', 
(SELECT phonenumbers.phonenumber FROM phonenumbers WHERE phonetype = 'WORK PHONE' AND id = a.id) AS 'WORK PHONE', 
(SELECT phonenumbers.phonenumber FROM phonenumbers WHERE phonetype = 'CELL PHONE' AND id = a.id) AS 'CELL PHONE' 
FROM phonenumbers a 
GROUP BY a.id; 

可能會有所幫助。 乾杯。

+0

我強烈建議在每個子查詢中加入「limit 1」,因爲你一定會遇到你會遇到的情況給定用戶遲早會得到多個結果,這會破壞一切。 – 2013-04-03 22:49:20

+0

我運行此解決方案並出現錯誤1242子查詢返回多於1行。我相信這是由於我的描述不佳,每個ID有多個電話號碼和電話類型。我將表格示例添加到原始帖子中,以幫助澄清即時消息的內容。謝謝 – user2242491 2013-04-03 23:10:57

+0

好吧,一個ID可能有很多HOME PHONE號碼? - 他們是否有時間戳了有效性......你可以在子查詢中用'distinct()'或'max()'來包裝'phonenumbers.phonenumber',或者添加一個WHERE子句來得到最新的一個?讓我知道。 – 2013-04-03 23:14:12