sql語句面試題(城市人口統計)
問題描述:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
城市表
【城市】
北京
上海
天津
人口表:
【性別】【城市】 【人口】
男 浙江 100
女 北京 500
男 上海 120
女 深圳 50
女 浙江 52
男 北京 45
女 上海 180
男 深圳 254
未知 上海 20
希望查詢結果:
【性別】【北京】 【上海】 【天津】 【其他】
全部 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 行受影響)
*/
問題網址:http://topic.csdn.net/u/20081006/16/cedf3352-844e-45c8-b6f3-39508ba08e72.html
相關文章
- 統計介面sql語句SQL
- 統計報表 -- sql統計語句SQL
- jivejdon sql語句問題SQL
- Java面試需要知道的SQL語句語法Java面試SQL
- 統計未用繫結變數的sql語句變數SQL
- SQL語句統計每天、每月、每年的 資料SQL
- 通過分析SQL語句的執行計劃優化SQL語句SQL優化
- SQL語句SQL
- Java中如何解析SQL語句、格式化SQL語句、生成SQL語句?JavaSQL
- 最簡單的sql語句(增刪改查統計)SQL
- 用SQL語句統計IP地址前三段 (轉)SQL
- 【MySQL】經典資料庫SQL語句編寫練習題——SQL語句掃盲MySql資料庫
- SQL語句巢狀查詢問題SQL巢狀
- 對sql語句的優化問題SQL優化
- oracle效能問題:sql語句優化OracleSQL優化
- 由一條sql語句導致的系統IO問題SQL
- 一條Sql語句:取出表A中第31到第40記錄(面試題)SQL面試題
- sql語句大全SQL
- 共享SQL語句SQL
- SQL語句整理SQL
- SQL基本語句SQL
- 精妙Sql語句SQL
- SQL語句集合SQL
- oracle sql語句OracleSQL
- sql語句 求救!SQL
- SQL精妙語句SQL
- SQL語句收集SQL
- 常用SQL語句SQL
- sql常用語句SQL
- 【SQL】10 SQL UPDATE 語句SQL
- 【SQL】11 SQL DELETE 語句SQLdelete
- 清除SQL語句的執行計劃SQL
- 一條簡單的sql語句導致的系統問題SQL
- 50個SQL語句(MySQL版) 問題十四MySql
- 對sql語句的最佳化問題SQL
- SQL 語句select top 變數問題SQL變數
- 【SQL】9 SQL INSERT INTO 語句SQL
- 1.3. SQL 語句SQL