2010-12-20 3 views
2

저는 몇 시간 동안이 쿼리를 바로 사용하는 데 어려움을 겪고 있습니다. 나는 엄청난 양의 데이터를 가지고 있으며, ID가 10,15,18,25 인 부서 만 보여주고 싶습니다. 여기에서 ID 15 (즉, 15-18)로 각 부서의 수익을 뺍니다.MySQL - 테이블의 특정 행을 빼고 다른 행과 함께 결과를 표시합니다.

I는 다음의 쿼리 데이터를 필터링 :

SELECT * deptTable FROM WHERE ID IN (10,15,18,25) 및 날짜 = "2009-01-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입니다 원하는 결과를 줄 것이다 부서 지역의 나머지 부분을 수행 :

부서 ---------- 날짜 - --------------- 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

관련 문제