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