2014-09-10 23 views
-1

我希望我比實際上更困難。這是我的問題:我需要編寫一個SQL查詢,它將統計CUSTOMER_TABLE中所有客戶的PHONE_TYPE爲「家庭電話」和「手機」(即,這些客戶在表中有兩行)的所有客戶只有「家庭電話」(這些客戶只有表中的一行)所有隻有「手機」的客戶(這些客戶也只在表中有一行)以及所有沒有PHONE_TYPE(這些客戶客戶在表格中至少有一行)。這裏是它如何工作的一個簡單的例子:在CUSTOMER_ADDRESS表如何使用SQL返回客戶列表,包括家庭電話和手機,僅限家庭電話,僅限手機,還是沒有電話?

的樣本數據:

ACCOUNT_NO PHONE_TYPE 
---------- ---------- 
A   home phone 
A   cell phone 
B   home phone 
C   home phone 
D   cell phone 
E   work phone 
F   no phone 

在紙面上,查詢將返回類似:

Phone types       | Account Numbers 
------------------------------------------------------- 
Both "home phone" and "cell phone" | A 
------------------------------------------------------- 
"home phone" only      | B, C 
------------------------------------------------------- 
"cell phone" only      | D 
------------------------------------------------------- 
Neither "home phone" nor "cell phone" | E, F 

我不相信聯盟會起作用。對創建查詢的基本刺傷看起來像這樣:

SELECT PHONE_TYPE, ACCOUNT_NO 
FROM CUSTOMER_ADDRESS 
WHERE...help!!!!!! 
GROUP BY PHONE_TYPE, ACCOUNT_NO 
ORDER BY PHONE_TYPE, ACCOUNT_NO 

謝謝!

+2

您使用的數據庫是? – 2014-09-10 15:48:29

+0

我相信,我使用WinSQL,它沒有'GROUP_CONCAT()'函數。 – 2014-09-10 16:39:05

+3

@JasonBodak WinSQL只是數據庫的一個接口,連接到哪個數據庫? – Taryn 2014-09-10 18:04:55

回答

1

您可以在每個客戶級別獲得信息。下面是使用MySQL語法的一種方法:

select phone_type, group_concat(account_no) as accounts 
from (select ca.account_no, 
      group_concat(distinct phone_type order by phone_type separator ' and ') as phone_types 
     from customer_address ca 
     group by ca.account_no 
    ) ca 
group by phone_type; 

這是基本查詢。大多數數據庫都有一個類似於group_concat()的功能。

+0

非常感謝,先生! – 2014-11-17 18:44:11

相關問題