3

テーブルが2つある場合がCustomersありTransactionsます。

多くの顧客が顧客グループを形成する場合があります(Customersテーブル内のレコード)。Customersグループのすべての顧客が特定の条件(数値列)を持っている場合は、特定の合計を1つの行(つまりグループごと)に表示する必要がありますxCol <> 5。それらのいずれか(別名少なくとも1つ)が持っているxCol = 5場合は、グループではなくすべての顧客を表示する必要があります。

顧客テーブル

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

前もって感謝します

4

2 に答える 2

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
于 2013-03-15T09:21:27.897 に答える
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
于 2013-03-15T09:27:28.967 に答える