2

几个小时以来,我一直在努力解决这个问题。我有大量数据,我只想显示 ID 为 10、15、18 和 25 的部门。从这里,我想从 15 中减去 ID 为 18 的每个部门的利润,即 15-18。

我使用以下查询过滤数据:

SELECT * FROM deptTable WHERE ID IN(10,15,18,25) AND date = '2009-01-25'

部门 ---------- 日期 ---------------- ID ----------------- 利润
英国 -- -------- 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 --------------- 1070
英国 ---------- 2009-01-25 ---------- 25 ---------------- 3000
巴西 ----- -- 2009-01-25 ---------- 25 ---------------- 1850
日本------- 2009-01-25 -- -------- 25 ---- 1580

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

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

部门 ---------- 日期 ---------------- ID ----------------- 利润
英国 -- -------- 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
西班牙-------- 2009-01-25 ---------- 25 ------------ --- 1070

2 分:
1. 计算的行 ID 列不必读取 '15-18',我只是输入了 '15-18' 来帮助解释问题
2. 斜体/粗体是唯一计算的行,所有其他行保持不变

这样的事情肯定是可能的吗?

谢谢,

4

1 回答 1

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 |
+--------+------------+-------+--------+
于 2010-12-20T19:22:29.537 回答