2010-12-20 1 views
2

私は今このクエリを何時間も取得するのに苦労しています。私は膨大な量のデータを持っており、IDが10,15,18、および25の部門だけを見せたいと思います。ここからは、ID 18を持つ各部門の利益を15から15から18まで引きます。MySQL - テーブルの特定の行を減算し、他の行と並んで結果を表示する

私は次のクエリでデータをフィルタ:

SELECT * FROM deptTable WHERE ID IN(10,15,18,25)と日付= '2009年1月25日'

DEPTを - --------- date ---------------- ID ----------------- profit
イギリス - --------- 2009-01-25 ---------- 10 ---------------- 2000
ブラジル----- - 2009-01-25 ---------- 10 ---------------- 1300
日本------- 2009-01-25 --------- 10 ---------------- 2500
スペイン------- 2009-01-25 ---------- 10 ---------------- 3200
イギリス---- ------ 2009-01-25 ---------- 15 ---------------- 4000
ブラジル------- 2009 -01-25 ---------- 15 ---------------- 1700
日本------- 2009-01-25 --- ------- 15 ---------------- 3500
スペイン-------- 2009-01-25 --------- - 15 --------------- 1200
イギリス---------- 2009-01-25 ---------- 18 --- ------------- 2500
ブラジル------- 2009-01-25 ---------- 18 ---------- ------ 1300
日本------- 2009-01-25 --------- 18 ---------------- 2120
スペイン------- 2009-01-25 ---------- 18 ---------------- 800

イギリス---- ------ 2009-01-25 ---------- 25 ---------------- 3000
ブラジル------- 2009 -01-25 ---------- 25 ---------------- 1850
日本------- 2009-01-25 --- ------ 25 ---------------- 1580
スペイン-------- 2009-01-25 ---------- 25 --------------- 1070

私が基本的に望むのは、ID 15の行からID 18の各行を減算することです。例として、イギリスを取る: -

4000 = 1500 2500 DEPT領域の残りの部分を実行することで、所望の結果を与えるであろう。

DEPT ----------日付 - --------------- ID ----------------- profit
イギリス---------- 2009- 01-25 ---------- 10 ---------------- 2000
ブラジル------- 2009-01-25 ---- ------ 10 ---------------- 1300
日本------- 2009-01-25 --------- 10 - ---------------- 2500
スペイン------- 2009-01-25 ---------- 10 ------- --------- 3200
イギリス---------- 2009-01-25 ---------- 15-18 ------------ 1500
ブラジル - ------ 2009-01-25 ---------- 15-18 ------------ 400
日本------- 2009-01 -25 ---------- 15-18 ----------- 1380
スペイン-------- 2009-01-25 ------- --- 15-18 ----------- 400

英国---------- 2009-01-25 ---------- 25 - --------------- 3000
ブラジル------- 2009-01-25 ---------- 25 -------- -------- 1850
日本------- 2009-01-25 ---------- 25 --------------- - 1580
スパin -------- 2009-01-25 ---------- 25 --------------- 1070

2点:
1.計算された行のID列は'15 -18 'を読み取る必要はありません。問題の説明に役立つように'15 -18'と入力しました。
2.イタリック体/太字は唯一の計算行です。行は同じままです

確かにこれが可能ですか?

おかげで、

答えて

2

私はこのような何かがうまくいくと思います...

SELECT a.dept, a.date, IF(a.id=15,'15-18',a.id) AS id, IF(b.profit IS NULL,a.profit,a.profit-b.profit) AS profit 
FROM deptTable a 
LEFT JOIN deptTable b ON a.ID=15 AND b.ID=18 AND a.dept=b.dept 
WHERE a.ID IN(10,15,25) AND a.date = '2009-01-25' 

テスト済み結果:

+--------+------------+-------+--------+ 
| dept | date  | id | profit | 
+--------+------------+-------+--------+ 
| UK  | 2009-01-25 | 10 | 2000 | 
| Brazil | 2009-01-25 | 10 | 1300 | 
| JAPAN | 2009-01-25 | 10 | 2500 | 
| SPAIN | 2009-01-25 | 10 | 3200 | 
| UK  | 2009-01-25 | 15-18 | 1500 | 
| Brazil | 2009-01-25 | 15-18 | 400 | 
| JAPAN | 2009-01-25 | 15-18 | 1380 | 
| SPAIN | 2009-01-25 | 15-18 | 400 | 
| UK  | 2009-01-25 | 25 | 3000 | 
| Brazil | 2009-01-25 | 25 | 1850 | 
| JAPAN | 2009-01-25 | 25 | 1580 | 
| SPAIN | 2009-01-25 | 25 | 1070 | 
+--------+------------+-------+--------+ 
+0

ありがとうございました!自己結合は理にかなっています。 – cbros2008

関連する問題