博客 > SQL知識:SQL行轉(zhuǎn)列
瀏覽量:1401次評論:0次
作者:銳成網(wǎng)絡(luò)整理時間:2024-05-21 14:09:12
SQL是一種強大的數(shù)據(jù)庫查詢語言,它允許我們對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行高效的管理和操作。而SQL行轉(zhuǎn)列是SQL技術(shù)中的一項重要應(yīng)用,它可以將數(shù)據(jù)庫表中的行數(shù)據(jù)轉(zhuǎn)換為列數(shù)據(jù),極大地方便了數(shù)據(jù)的處理和分析。本文將詳細(xì)講解SQL知識之SQL行轉(zhuǎn)列,以供參考。
CASE函數(shù)的類型
CASE具有兩種格式,簡單CASE函數(shù)和CASE搜索函數(shù)。這兩種方式,大部分情況下可以實現(xiàn)相同的功能。
簡單CASE函數(shù)
語法
CASE column
WHENTHEN value
WHENTHEN value
......
ELSE value END
示例
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END
CASE搜索函數(shù)
語法
CASE WHEN[,] THEN value
WHEN[,] THEN value
......
ELSE value END
示例
CASE WHEN sex = '1' THEN '男'
WHEN sex = '2' THEN '女'
ELSE '其他' END
簡單CASE 函數(shù)重在簡潔,但是它只適用于這種單字段的單值比較,而CASE 搜索函數(shù)的優(yōu)點在于適用于所有比較(包括多值比較)的情況。
例如
CASE WHEN sex = '1' AND age>18 THEN '成年男性'
WHEN sex = '2' AND age>18 THEN '成年女性'
ELSE '其他' END
注意:CASE函數(shù)只返回第一個符合條件的值,剩下的CASE部分將會被自動忽略。比如說,下面這段SQL,你永遠(yuǎn)無法得到“第二類”這個結(jié)果
CASE WHEN Type IN ('a','b') THEN '第一類'
WHEN Type IN ('a') THEN '第二類'
ELSE '其他類' END
行轉(zhuǎn)列
CASE用的比較廣泛的功能就是行轉(zhuǎn)列,就是將記錄行里的數(shù)據(jù)按條件轉(zhuǎn)換成具體的列。看如下的一個示例:
IF OBJECT_ID('Score') IS NOT NULL DROP TABLE Score
GO
CREATE TABLE Score(姓名 NVARCHAR(10),課程 NVARCHAR(10),分?jǐn)?shù) INT)
INSERT INTO Score VALUES (N'張三',N'語文',74)
INSERT INTO Score VALUES (N'張三',N'數(shù)學(xué)',83)
INSERT INTO Score VALUES (N'張三',N'物理',93)
INSERT INTO Score VALUES (N'李四',N'語文',74)
INSERT INTO Score VALUES (N'李四',N'數(shù)學(xué)',84)
INSERT INTO Score VALUES (N'李四',N'物理',94)
GO
SELECT * FROM Score
GO
執(zhí)行完成后的結(jié)果如圖:
現(xiàn)在我們想實現(xiàn)這樣的功能,就是將各學(xué)科作為單獨的列來顯示各個學(xué)生各科的成績。我們可以對課程里的記錄做如下的行列轉(zhuǎn)換:
SELECT 姓名,
MAX(CASE 課程 WHEN N'語文' THEN 分?jǐn)?shù) ELSE 0 END) 語文,
MAX(CASE 課程 WHEN N'數(shù)學(xué)' THEN 分?jǐn)?shù) ELSE 0 END) 數(shù)學(xué),
MAX(CASE 課程 WHEN N'物理' THEN 分?jǐn)?shù) ELSE 0 END) 物理
FROM Score
GROUP BY 姓名
執(zhí)行結(jié)果如下:
行轉(zhuǎn)列新方法
這樣就很好的完成了行列的轉(zhuǎn)換了,當(dāng)然這只是一個比較簡單的例子,SQL Server 2005版之后有單獨的行列轉(zhuǎn)換功能PIOVT,以下查詢同樣可以得到上面的結(jié)果:
SELECT * FROM Score
PIVOT( MAX(分?jǐn)?shù)) FOR 課程 IN (語文,數(shù)學(xué),物理)) A
重要聲明:本文來自SQL數(shù)據(jù)庫開發(fā),經(jīng)授權(quán)轉(zhuǎn)載,版權(quán)歸原作者所有,不代表銳成觀點,轉(zhuǎn)載的目的在于傳遞更多知識和信息。
相關(guān)文章推薦
2025-05-27 11:53:22
2024-08-20 17:58:16
2024-08-19 17:49:29
2024-08-19 10:23:28
2024-08-16 17:06:33
熱門工具
標(biāo)簽選擇
閱讀排行
我的評論
還未登錄?點擊登錄