当前位置: 代码迷 >> Sql Server >> 简略面试SQL 不会 求解
  详细解决方案

简略面试SQL 不会 求解

热度:540   发布时间:2016-04-24 09:02:27.0
简单面试SQL 不会 求解
--Country    Sex    Population
--中国        男     340
--中国        女     260
--美国   男     45 
--美国        女     55
--加拿大      男     51
--加拿大      女     49
--英国        男     40
--英国        女     60




--要的结果如下
--country  男      女
--中国     340     260
--美国     45       55
--加拿大   51       49
--英国     40       60

------解决思路----------------------
SELECT COUNTRY, 
        MAX(CASE WHEN SEX='男' THEN POPULICATION END) AS '男', 
        MAX(CASE WHEN SEX='女' THEN POPULICATION END) AS '女'
from tb
group by country

------解决思路----------------------
create table worldCount(country varchar(20),sex char(3),population int);
insert into worldCount values('中国','男',340);
insert into worldCount values('中国','女',260);
insert into worldCount values('美国','男',45);
insert into worldCount values('美国','女',55);
insert into worldCount values('加拿大','男',51);
insert into worldCount values('加拿大','女',49);
insert into worldCount values('英国','男',40);
insert into worldCount values('英国','女',60);

select country,sum(case when sex ='男' then population else 0 end) '男',
 sum(case when sex ='女' then population else 0 end) '女'
from worldCount
group by country

------解决思路----------------------
行转列或 表连接即可

SELECT T1.Country,T1.[Population] AS[男],T2.[Population] AS[女]
FROM TB T1
JOIN TB T2 ON T1.Country=T2.Country
WHERE T1.Sex='男'AND T2.Sex='女'

------解决思路----------------------

select country,[男],[女] from worldCount pivot
(sum(population) for sex in ([男],[女])) pt
  相关解决方案