2017-04-09 2 views
1

내 작동 쿼리는;복수 선택 쿼리 (복수 선택 가능) MySQL에서 조건

SELECT SUM(EVET) as Evet, 
     SUM(HAYIR) as Hayir, 
     SUM(BOS) as Evet, 
     SUM(GECERSIZ) as Gecersiz 
FROM sandiklar 
WHERE TUR = 'MM' 

UNION 

SELECT SUM(EVET), 
     SUM(HAYIR), 
     SUM(BOS), 
     SUM(GECERSIZ) 
FROM sandiklar 
WHERE TUR = 'M' 

UNION 

SELECT SUM(EVET), 
     SUM(HAYIR)r, 
     SUM(BOS), 
     SUM(GECERSIZ) 
FROM sandiklar 
WHERE TUR = 'MB' 

출력은 다음과 같습니다 내 질문은

enter image description here

; Where 조건에 따라 12 개의 clumns 및 name clumns가있는 3 개의 행이 하나의 행이되도록 쿼리를 만들 수 있습니까? 그것은 하나 개의 행이 될 것

mmEvet mmHayir mmBos mmgecersiz mEvet mHayir mBos mgecersiz mbEvet mbHayir의 mbBos는

을 mbgecersiz.

답변

1

당신은 SUM에게 (CASE 문을 사용하여 얻을 수 있습니다 : 여기 샘플을 설정 한

drop table if exists sandiklar; 

create table if not exists sandiklar(tur text, EVET int, HAYIR int, BOS int, GECERSIZ int); 

insert into sandiklar values 
('MM', 100, 220, 310, 410), 
('MM', 110, 230, 320, 420), 
('MM', 120, 230, 360, 450), 
('M', 110, 210, 370, 420), 
('M', 140, 250, 320, 470), 
('M', 120, 250, 330, 430), 
('MB', 110, 260, 310, 490), 
('MB', 150, 210, 310, 430), 
('MB', 130, 210, 310, 430); 

SELECT SUM(CASE WHEN TUR = 'MM' THEN EVET ELSE 0 END) as EvetMM, 
     SUM(CASE WHEN TUR = 'MM' THEN HAYIR ELSE 0 END) as HayirMM, 
     SUM(CASE WHEN TUR = 'MM' THEN BOS ELSE 0 END) as EvetMM, 
     SUM(CASE WHEN TUR = 'MM' THEN GECERSIZ ELSE 0 END) as GecersizMM, 
     SUM(CASE WHEN TUR = 'M' THEN EVET ELSE 0 END) as EvetM, 
     SUM(CASE WHEN TUR = 'M' THEN HAYIR ELSE 0 END) as HayirM, 
     SUM(CASE WHEN TUR = 'M' THEN BOS ELSE 0 END) as EvetM, 
     SUM(CASE WHEN TUR = 'M' THEN GECERSIZ ELSE 0 END) as GecersizM, 
     SUM(CASE WHEN TUR = 'MB' THEN EVET ELSE 0 END) as EvetMB, 
     SUM(CASE WHEN TUR = 'MB' THEN HAYIR ELSE 0 END) as HayirMB, 
     SUM(CASE WHEN TUR = 'MB' THEN BOS ELSE 0 END) as EvetMB, 
     SUM(CASE WHEN TUR = 'MB' THEN GECERSIZ ELSE 0 END) as GecersizMB 
FROM sandiklar 
WHERE TUR IN ('MM','M','MB'); 

drop table if exists sandiklar; 

| EvetMM | HayirMM | EvetMM | GecersizMM | EvetM | HayirM | EvetM | GecersizM | EvetMB | HayirMB | EvetMB | GecersizMB | 
|-------:|--------:|--------|------------|--------|---------|--------|------------|--------|---------|--------|------------| 
| 330 | 680  | 990 | 1280  | 370 | 710  | 1020 | 1320  | 390 | 680  | 930 | 1350  | 

:.. http://rextester.com/SIO50162

+0

Woww 그게 정말 빨리 내 여러 선택 어떤 성능 차이가 있나요 쿼리와 너의 것? – Martin

+0

TUR에 인덱스가 있다면'WHERE TUR IN ('MM', 'M', 'MB')'를 추가 할 수 있습니다 – McNets