?? 排序.txt
字號:
題目:
表A
姓名 科目 分數
---------------------------------
張三 語文 88
張三 數學 90
張三 政治 90
李四 語文 90
李四 數學 92
王五 語文 70
王五 數學 80
劉二 語文 90
劉二 政治 73
-----------------------------
生成報表如下:
姓名 語文名次 數學名次 政治名次 總分名次
張三 3 2 1 2
李四 1 1 1
王五 1 3 3
劉二 4 3 4 */
代碼:
drop table a
drop table b
create table A(name char(10),subject varchar(10) ,chenji int)
insert into A select '張三', '語文', 88
union all select '張三', '數學', 90
union all select '張三','政治', 90
union all select '李四','語文', 90
union all select '李四' ,'數學', 92
union all select '王五', '語文', 70
union all select '王五', '數學', 80
union all select '劉二', '語文', 90
union all select '劉二', '政治', 73
create table B(name char(10),數學 int,語文 int,政治 int)
--查詢處理
DECLARE @s nvarchar(4000)
--交叉報表處理代碼頭
SET @s='Insert into B SELECT name'
--生成列記錄水平顯示的處理代碼拼接(處理Item列)
SELECT @s=@s
+','+QUOTENAME(subject)
+N'=SUM(CASE subject WHEN '+QUOTENAME(subject,N'''')
+N' THEN chenji END)'
FROM a
GROUP BY subject
--拼接交叉報表處理尾部,并且執行拼接后的動態SQL語句
EXEC(@s+N'
FROM a
GROUP BY name')
SELECT *,數學排名=(SELECT COUNT(DISTINCT 數學) FROM b WHERE 數學>=a.數學),
語文排名=(SELECT COUNT(DISTINCT 語文) FROM b WHERE 語文>=a.語文),
政治排名=(SELECT COUNT(DISTINCT 政治) FROM b WHERE 政治>=a.政治)
FROM b a
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -