sql语句⾯试题(城市⼈⼝统计).问题描述:
城市表
【城市】
北京
上海
天津
⼈⼝表:
【性别】【城市】【⼈⼝】
男浙江 100
⼥北京 500
男上海 120
⼥深圳 50
⼥浙江 52
男北京 45
⼥上海 180
男深圳 254
未知上海 20
多表查询sql语句面试题希望查询结果:
【性别】【北京】【上海】【天津】【其他】
全部 545 320 0 456
男 45 120 0 354
⼥ 500 180 0 102
未知 0 20 0 0
说明:其他包括北京、上海、天津以外的所有城市
--> liangCK⼩梁于2008-10-06
--> ⽣成测试数据: #T
IF OBJECT_ID('tempdb.dbo.#T') IS NOT NULL DROP TABLE #T
CREATE TABLE #T (城市 NVARCHAR(4))
INSERT INTO #T
SELECT '北京' UNION ALL
SELECT '上海' UNION ALL
SELECT '天津'
--> liangCK⼩梁于2008-10-06
-
-> ⽣成测试数据: #⼈⼝表:
IF OBJECT_ID('tempdb.dbo.#⼈⼝表') IS NOT NULL DROP TABLE #⼈⼝表
CREATE TABLE #⼈⼝表 (性别 NVARCHAR(4),城市 NVARCHAR(4),⼈⼝ INT)
INSERT INTO #⼈⼝表
SELECT '男','浙江','100' UNION ALL
SELECT '⼥','北京','500' UNION ALL
SELECT '男','上海','120' UNION ALL
SELECT '⼥','深圳','50' UNION ALL
SELECT '⼥','浙江','52' UNION ALL
SELECT '男','北京','45' UNION ALL
SELECT '⼥','上海','180' UNION ALL
SELECT '男','深圳','254' UNION ALL
SELECT '未知','上海','20'
--SQL查询如下:
DECLARE @SQL VARCHAR(8000),@city VARCHAR(1000)
SET @SQL=''
SET @city=''
SELECT @SQL=@SQL+',SUM(CASE WHEN a.城市='''+城市+''' then b.⼈⼝ else 0 end) ['+城市+']',
@city=@city+','''+城市+''''
FROM #T
SET @city=STUFF(@city,1,1,'')
EXEC ('SELECT ISNULL(c.性别,''全部'') 性别'+@SQL+',SUM(CASE WHEN b.城市 NOT IN('+@city+')
THEN b.⼈⼝ else 0 end) [其它]      FROM #T a RIGHT JOIN #⼈⼝表 b on a.城市=b.城市
RIGHT JOIN
(
SELECT 性别=''男''
UNION ALL
SELECT 性别=''⼥''
UNION ALL
SELECT 性别=''未知''
) AS c
ON b.性别=c.性别
GROUP BY c.性别
WITH ROLLUP
ORDER BY CASE WHEN c.性别=''男'' THEN 0
WHEN c.性别=''⼥'' THEN 1
ELSE 2 END ')
/*
性别北京上海天津其它
---- ----------- ----------- ----------- -----------
男    45          120        0          354⼥    500        180        0          102未知  0          20          0          0
全部  545        320        0          456 (4 ⾏受影响)
*/

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。