2013-03-15 18 views
3

我有一個案件,我有2個表,CustomersTransactions獲得行,如果條件適用其他單行

許多客戶可能組成一個客戶羣(記錄在Customers表內)。如果所有組的客戶都有一定的條件(數字列xCol <> 5),我需要顯示Customers和某些總和(單個組)。如果他們中的任何一個(又名至少一個)有xCol = 5,我需要顯示所有客戶而不是小組。

Customers表

Customer Group  Customer Code 
ALPHA GROUP A  1 
BETA GROUP A  2 
GAMMA GROUP A  3 
DELTA GROUP B  4 
LAMDA GROUP B  5 

事務表

Customer Code xCol Amount 
1     1 4 
2     1 4 
3     1 4 
4     5 1 
5     2 2 

在上述情況下,我需要證明這些:

Customer Group  Amount 
-----   GROUP A  12 
DELTA   GROUP B  1 
LAMDA   GROUP B  2 

預先感謝您

+1

去請這兩個表和你正在尋找所需的輸出後的一些樣本數據。這對解釋你想要做什麼很有幫助。 – 2013-03-15 08:50:02

+1

我編輯了最初的帖子,馬哈茂德。感謝您的建議。 – brd 2013-03-15 09:04:51

+0

@brd:您希望的輸出看起來與您所描述的相反 - 您按照沒有xcol = 5的組進行客戶總結,並且包括個人客戶,其中有一個xcol = 5,與您最初描述的相反。你究竟想要什麼? – 2013-03-15 09:13:08

回答

3

嘗試:

with cte as 
(select c.*, 
     t.Amount, 
     max(case xCol when 5 then 1 end) over (partition by c.[Group]) xCol5 
from customers c 
left join transactions t on c.[Customer Code] = t.[Customer Code]) 
select case xCol5 when 1 then [Customer Code] end [Customer Code], 
     [Group], 
     sum(Amount) Amount 
from cte 
group by [Group], case xCol5 when 1 then [Customer Code] end 
+0

非常感謝Mark! – brd 2013-03-15 09:27:14

0

需要一些優化,但你可以

SELECT * 
    FROM (SELECT tc.CUSTOMER, tc.GROUP, tt.AMNT AS AMOUNT 
      FROM CUSTOMERS tc 
       JOIN TRANSACTIONS tt 
        ON tc.CUST_CODE = tt.CUST_CODE 
       JOIN (SELECT DISTINCT tc.GROUP 
         FROM CUSTOMERS tc JOIN TRANSACTIONS tt 
           ON tt.CUST_CODE = tc.CUST_CODE 
         WHERE tt.XCOL = 5) spgrp 
        ON spgrp.GROUP = tc.GROUP) 
UNION ALL 
( SELECT '----' AS CUSTOMER, tc.GROUP, SUM (tt.AMNT) AS AMOUNT 
    FROM CUSTOMERS tc 
      JOIN TRANSACTIONS tt 
      ON tc.CUST_CODE = tt.CUST_CODE 
      JOIN (( SELECT DISTINCT GROUP FROM TEST_CUST) 
       MINUS 
       (SELECT DISTINCT tc.GROUP 
        FROM CUSTOMERS tc JOIN TRANSACTIONS tt 
          ON tt.CUST_CODE = tc.CUST_CODE 
        WHERE tt.XCOL = 5)) othgrp 
      ON othgrp.GROUP = tc.GROUP 
GROUP BY tc.GROUP) 
ORDER BY 2, 1