MySQL - Вычитание определенных рядов таблицы и представление результатов вместе с другими рядами

StackOverflow https://stackoverflow.com/questions/4492992

Вопрос

Я боролся с тем, чтобы сделать этот запрос прямо сейчас. У меня огромное количество данных, и я хочу показать только отделы с IDS 10,15,18 и 25. Отсюда я хочу вычесть прибыль для каждого отдела с ID 18 из 15, то есть 15-18.

Я фильтрую данные со следующим запросом:

Выберите * из depttable, где ID в (10,15,18,25) и дате = '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 ---------------- 3000
Бразилия ------- 2009-01-25 ---------- 25 ---------------- 1850
Япония ------- 2009-01-25 --------- 25 ---------------- 1580
Испания -------- 2009-01-25 ---------- 25 --------------- 1070

То, что я в основном хочу, - это вычесть каждую строку с помощью ID 18 из рядов с ID 15. Примером Великобритании:

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. Столбец идентификатора вычисленных строк не должен читать '15 -18 ', я только что напечатал 15-18', чтобы помочь объяснить проблему
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 |
+--------+------------+-------+--------+
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top