2013-04-29 143 views
3
SELECT COUNT(Type) from House where Type = 1 
SELECT COUNT(Type) from House where Type = 2 
SELECT COUNT(Type) from House where Type = 3 

我的问题是:我想参加以上3条语句获得:3列,即如: ColumnType1: '50',ColumnType2: '60',columnType3:“ 45'加入select语句得到的SQL列

感谢

回答

3

您可以使用一个聚合F中的列结了CASE表达:

SELECT 
    count(case when Type = 1 then Type end) as type_1, 
    count(case when Type = 2 then Type end) as type_2, 
    count(case when Type = 3 then Type end) as type_3 
from House 
+0

嗨,我需要你的帮助。我创建了一个[动态查询](http://www.sqlfiddle.com/#!2/10bc2/17),它工作正常。但是当动态值有一个*空格*时(例如* channel *'unknown 01'在这个例子中,它[不起作用](http://www.sqlfiddle.com/#!2/6ff09/1) )。任何解决方案 – hims056 2013-04-29 13:29:55

+1

@ hims056你最好用反引号包装列名 - http://www.sqlfiddle.com/#!2/6ff09/2 – Taryn 2013-04-29 14:16:53

1

您可以使用case加起来如果Type比赛

SELECT sum(case when Type = 1 then 1 else 0 end) as type_1, 
     sum(case when Type = 2 then 1 else 0 end) as type_2, 
     sum(case when Type = 3 then 1 else 0 end) as type_3 
from House 
0
SELECT 
    COUNT(Type) as val1, 
    (SELECT COUNT(Type) from House where Type = 2) as val2, 
    (SELECT COUNT(Type) from House where Type = 3) as val3 
from House where Type = 1 
1

有一种清洁型SQL的,可以给你这个答案,但你必须在不同的行中的每个类型:

SELECT Type, COUNT(Type) FROM House GROUP BY Type 

它按照您的要求不给您列的缺点;但优点是它适用于任何数量的不同类型,而无需更改查询。