2017-08-11 17 views
-2

我有如下3個表計數:SQL點心和與多個條件和表

Cust_table columns: C_ID, C_Country 
Store_table columns: S_ID, S_Name, S_Country 
Tran_table columns: C_ID, S_ID, S_Type, Spending 

Cust_table

C_ID C_Country 
999 CN 
888 TW 

Store_table

S_ID S_Name S_Country 
123 ABC  CN 
456 DEF  JP 
789 GHI  CN 

Tran_table

C_ID S_ID S_Type Spending 
999 123 ML  106 
888 123 ML  642 
888 456 Outlet 364 
888 789 ML  422 
999 456 ML  263 

問題: 找出本地和非本地客戶的數量以及他們在各個商店的消費情況,通過S_country和S_Type訂購。 (S_Country = C_Country定義本地和非本地客戶&支出)

ANS必填字段:S_Country,S_ID,S_NAME,No_Local,Local_Spending,No_NonLocal,NonLocal_Speding

預期結果

S_Country S_ID S_Name No_Local Local_Speding No_NonLocal NonLocal_Spending 
CN  123 ABC  1  106   1   642 
CN  789 GHI  0  0    1   422 
JP  456 DEF  0  0    2   627 

我最初的想法是用count/countif(?)來找出本地和非本地支出的數量,總支出的總和。 但我不知道如何在一個查詢中包含所有條件。 任何人都可以請幫忙嗎?謝謝。

到目前爲止,我有

SELECT DISTINCT store_table.S_Country, 
store_table.store_ID, 
Store_table.store_name, 
SUM (spending) 

FROM store_table, tran_table 

WHERE Store_table.store_ID=tran_table.store_ID; 
+0

請添加表結構虛擬值和預期結果 – Shibon

+0

你嘗試過這麼遠嗎?如果你自己先嚐試一下,並在這裏發佈代碼,如果它不工作併發布樣本數據和期望的輸出,那將會很好。 – Learning

+0

s_type字段是否具有國家名稱或者s_country名稱/ c_country取決於它是本地/非本地客戶? – Aparna

回答

0

很可能沒有匹配的交易,商店,所以你必須使用外部聯接。

使用CASE expressions以除去不需要的(非)本地值:

SELECT S_Country, 
     S_ID, 
     SUM(CASE WHEN S_Country = C_Country THEN 1  END) AS No_Local, 
     SUM(CASE WHEN S_Country = C_Country THEN Spending END) AS Local_Spending, 
     SUM(CASE WHEN S_Country <> C_Country THEN 1  END) AS No_NonLocal, 
     SUM(CASE WHEN S_Country <> C_Country THEN Spending END) AS NonLocal_Spending 
FROM Store_table 
LEFT JOIN Tran_table USING (S_ID) 
LEFT JOIN Cust_table USING (C_ID) 
GROUP BY S_ID;