T-SQL學習:將一列數據查詢顯示成一行


     前幾天,剛參加工作的同學提一出問題:SQL Server中如何將一列數據以一行的方式顯示出來?

     當時在看有關SQL中行列互轉的問題,便以行列互轉的方式考慮了一下,沒有得出解決方法;后又到園子里搜索了一下,也沒搜索到比較好的方法,有些方法又太復雜,以目前的水平還吃不透,因為他的問題就比較簡單,沒考慮程序中的處理,也沒說大數據量時會怎么樣,只是單純地想一想如何實現?

     之后試出來了一個方法,比較簡單,以下列出代碼:

--步驟1:准備測試用的表和數據
IF OBJECT_ID('report') IS NOT NULL   --當前數據庫中如果已存在report表,則刪除
    DROP TABLE report
GO
CREATE TABLE report    --創建report測試表
(
    stuName NVARCHAR(20) NOT NULL,
    stuReport DECIMAL(12,0) NULL
)
GO
INSERT INTO report(stuName,stuReport)  --往表中插入測試數據
    SELECT '王小芳',80 UNION ALL
    SELECT '林志強',75 UNION ALL
    SELECT '劉瑞英',97 UNION ALL
    SELECT '趙華飛',65 UNION ALL
    SELECT '張錦雲',55 UNION ALL
    SELECT '張建國',67
GO
--查詢表中數據
SELECT stuName,stuReport FROM report ORDER BY stuReport
GO

     表中的數據如圖所示:

     現在將成績一列以一行的方式查詢顯示出來,代碼如下:

--步驟2:實現一列轉一行
DECLARE @var NVARCHAR(4000)
SET @var=''
SELECT @var=@var+','+CAST(stuReport AS NVARCHAR(10))+
                    ' AS ''column'+CAST(stuReport AS NVARCHAR(10))+''''  --自定義列名顯示
    FROM report               --將report表中的stuReport數據轉換成字符串拼接進@var變量,每條數據之間以英文逗號分隔
    ORDER BY stuReport

SET @var=STUFF(@var,1,1,'')     --去掉@var中的第一個逗號
SELECT @var   --測試輸出拼好的@var
EXEC('SELECT '+@var)   --在@var前添加SELECT關鍵字,組成一條SELECT語句,並執行這條語句
GO

     拼接好的@var變量的值如下:

55 AS 'column55',65 AS 'column65',67 AS 'column67',75 AS 'column75',80 AS 'column80',97 AS 'column97'

     在此字符串前再拼接上SELECT(注意有一空格),即可組成一條SELECT語句,再通過EXEC執行,最終得到的效果如下圖所示:

     了解了代碼實際情況后,大家都看出這是一個有點投機取巧的方式,比較傻瓜式;第一次發表隨筆,以后會繼續努力!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM