2017-06-11 16 views
1

Oracle Sqlが新しく、同じテーブルのフィルタで金額を合計する方法についてのブロックがあります。例えば同じテーブルのOracle SQL - 2の合計

EMPLOYEE表

Emp_ID 
Emp_name 

トランザクションファイル

TR_ID (= Emp_ID) 

TR_QTR 
TR_Type   
TR_Xref 
TR_Amt 

EMPLOYEE表

| EMP_ID | EMP_NAME  | 
+--------+----------------+ 
| 1  | sam spade  | 
| 2  | junior samples | 
| 3  | april showers | 

トランザクション表

| ID | QTR | Type | Xref | Amt | 
+----+-----+------+------+-------+ 
| 1 | 1 | W | F | 5.00 | 
| 1 | 1 | W | T | 2.23 | 
| 1 | 2 | W | T | 5.55 | 
| 1 | 1 | W | T | 4.44 | 
| 1 | 1 | W | F | 3.25 | 
| 1 | 1 | G | B | 1.23 | 
| 2 | 1 | W | T | 6.10 | 
| 2 | 1 | G | Z | 12.12 | 
| 2 | 1 | W | F | 9.88 | 
| 2 | 1 | W | F | 8.70 | 
| 3 | 1 | W | F | 4.00 | 
| 3 | 1 | W | T | 3.00 | 
| 3 | 1 | W | T | 5.00 | 
| 3 | 2 | W | T | 7.00 | 

私は私が期待しTR_QTR = 1 を選択したユーザとの出力にselect文をしたい:

| ID | Name   | Total TR_Amt    | Total TR_AMT     | 
| |    |(TR_Type = W and TR_Xref = F)| (TR_Type = W and TR_Xref = T)| 
+----+---------------+-----------------------------+------------------------------+ 
| 1 |sam spade  | 8.25      |  6.67     | 
| 2 |junior samples | 18.58     |  6.10     | 
| 3 |april showers | 4.00      |  8.00     | 

は、私はちょうど左は金額ごとに二回(トランザクションファイル)同じテーブルを結合しますか私は合計したいですか?

助けがありがたいです

+0

IDは、途中でトランザクションテーブルの従業員IDの非常に悪い名前です。トランザクションテーブルでは、IDという名前の列が*トランザクション* IDとみなされ、テーブル内のレコードを識別します。従業員IDの場合は、employee_idなどと呼びます。 –

+0

これらは実際の列名ではありません。ありがとうございます。また、RLOGとありがとうございましたNathan – DontKnow

答えて

1

あなたが何かしたい:従業員IDによって各列のため、基本的に

SELECT 
    e.Emp_ID 
, e.Emp_name 
, SUM(CASE WHEN t.TR_Type = 'W' AND t.TR_Xref = 'F') THEN TR_Amt ELSE 0 END) AS Total_W_F 
, SUM(CASE WHEN t.TR_Type = 'W' AND t.TR_Xref = 'T') THEN TR_Amt ELSE 0 END) AS Total_W_T 
FROM Employee_Table e 
LEFT OUTER JOIN Transaction_Table t ON e.Emp_ID = t.TR_ID 
WHERE t.TR_QTR = 1 
GROUP BY 
    e.Emp_ID 
, e.Emp_name 

あなたは条件に該当するSUM TR_Amt、そうでない場合はSUM 0

+0

は、このルートに行くことを選んだ - すべての答えは非常に感謝しています! – DontKnow

0

これはそれを行う必要があります。

WITH tr_wf AS (
SELECT tr_id as wfid, sum(tr_amt) as tr1 
    FROM transaction 
WHERE tr_type = 'W' AND tr_xref = 'F' 
GROUP BY tr_id 
), tr_wt AS (
SELECT tr_id as wtid, sum(tr_amt) as tr2 
    FROM transaction 
WHERE tr_type = 'W' AND trxref = 'T' 
GROUP BY tr_id 
) 
SELECT e.emp_id, e.emp_name, tr1 AS total_tr_amt_w_f, tr2 AS total_tr_amt_w_t 
    FROM employee e 
    JOIN tr_wf ON e.emp_id = wfid 
    JOIN tr_wt ON e.emp_id = wtid 
1

グループあなたの取引をしてための合計を構築2つのXREF:

select 
    e.id, 
    e.name, 
    coalesce(t.sumf, 0) as total_f, 
    coalesce(t.sumt, 0) as total_t 
from employee e 
left join 
(
    select 
    id, 
    sum(case when xref = 'F' then amt end) as sumf, 
    sum(case when xref = 'T' then amt end) as sumt 
    from tr 
    where type = 'W' 
    and qtr = 1 
    group by id 
) t on t.id = e.id; 
関連する問題