2010-12-20 17 views
2

我一直在努力使此查询正确地持续几个小时。我有大量的数据,我只想显示ID为10,15,18和25的部门。从这里,我想从每个部门中减去18的利润,即15-18,即15-18。MySQL - 减去表中的某些行并将结果与​​其他行一起显示

我用下面的查询过滤数据:

SELECT * FROM deptTable WHERE ID IN(10,15,18,25)和日期= '2009-01-25'

部门 - ---------日期---------------- ID -----------------利润
UK - --------- 2009-01-25 ---------- 10 ---------------- 2000
巴西----- - 2009-01-25 ---------- 10 ---------------- 1300
日本------- 2009-01-25 --------- 10 ---------------- 2500
西班牙------- 2009-01-25 ---------- 10 ---------------- 3200
UK ---- ------ 2009-01-25 ---------- 15 ---------------- 4000
Brazil ------- 2009 -01-25 ---------- 15 ---------------- 1700
日本------- 2009-01-25 --- ------- 15 ---------------- 3500
西班牙-------- 2009-01-25 --------- - 15 --------------- 1200
UK ---------- 2009-01-25 ---------- 18 --- ------------- 2500
巴西------- 2009-01-25 ---------- 18 ---------- ------ 1300
日本------- 2009-01-25 --------- 18 ---------------- 2120
西班牙------- 2009-01-25 ---------- 18 ---------------- 800

UK ---- ------ 2009-01-25 ---------- 25 ---------------- 3000
Brazil ------- 2009 -01-25 ---------- 25 ---------------- 1850
日本------- 2009-01-25 --- ------ 25 ---------------- 1580
西班牙-------- 2009-01-25 ---------- 25 --------------- 1070

我基本上想要的是,然后从ID为15的行中减去ID为18的每一行。以英国为例:

4000 - 2500 = 1500,做部门区域的其余部分将得到所需的结果,其是:

部门----------日期 - --------------- ID ----------------- profit
UK ---------- 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

UK ---------- 2009-01-25 ---------- 25 - --------------- 3000
巴西------- 2009-01-25 ---------- 25 -------- -------- 1850
日本------- 2009-01-25 ---------- 25 --------------- - 1580
Spa 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 2010-12-22 09:04:28

相关问题