2017-04-09 130 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

我的問題是; 我可以做這個查詢,以便所有三行成爲一行,包含12個列和根據Where條件命名的列。

mmEvet mmHayir mmBos mmgecersiz mEvet mHayir MBO的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