SQL Server數(shù)據(jù)查詢列轉(zhuǎn)行 在SQL Server數(shù)據(jù)庫表查詢過程中,我們往往需要將查詢結(jié)果中的列數(shù)據(jù)進行處理,如拼接成一條完整的記錄。這些操作一般簡稱為查詢結(jié)果的列轉(zhuǎn)行操作。本文以某一項目實際需求為背景對查詢結(jié)果的列轉(zhuǎn)行實現(xiàn)過程進行分析。 問題描述假設(shè)存在以下數(shù)據(jù)表,數(shù)據(jù)表名稱為judger,字段包括sid,sname,jid,pname。該表為某競賽裁判信息表,其中sid為競賽項目編號,sname為競賽名稱,jid為裁判編號,pname為裁判所屬省份。表結(jié)構(gòu)及基本數(shù)據(jù)描述如下圖: 裁判表及測試用數(shù)據(jù) 裁判表及測試用數(shù)據(jù)描述如上表,項目要求按照競賽項目分別統(tǒng)計裁判人數(shù)、與裁判省份信息,其中裁判省份需要將其顯示到單個字段中,數(shù)據(jù)格式為該項目所有裁判省份去掉重復(fù)的,逗號間隔。合并競賽編號與名稱為一個字段顯示。以上測試數(shù)據(jù)要求顯示效果展示如下: 要求查詢結(jié)果 解決措施與所需知識以上問題為典型列轉(zhuǎn)行問題,同時涉及到數(shù)據(jù)表的分組統(tǒng)計方法。主要所需使用到的知識包括cancat函數(shù)、count函數(shù)、stuff函數(shù)的使用,函數(shù)及相關(guān)知識點說明如下: 1、cancat()函數(shù) 該函數(shù)主要用于實現(xiàn)將多個字符串進行連接,其語法定義為cancat(string1,...stringn),即可以將n個字符串連接成一個字符串,對應(yīng)該項目問題競賽編號與競賽名稱可以使用cancat進行連接。所需注意如果字段類型為數(shù)值型,需要首先類型轉(zhuǎn)換為字符串。如:concat(sid , sname) 2、count()函數(shù) 該函數(shù)為SQL Server所提供的聚合函數(shù),用于統(tǒng)計某一字段的行數(shù),參數(shù)可給出字段名稱,如果使用通配符*,則統(tǒng)計記錄的數(shù)量。本例題需要統(tǒng)計裁判員的人數(shù),可帶參數(shù)jid,實現(xiàn)裁判員人數(shù)的統(tǒng)計。如count(jid)。 3、stuff()函數(shù) 該函數(shù)用于刪除字符串中的某一部分,然后從指定位置插入子字符串,函數(shù)原型為: stuff函數(shù)說明 4、for xml path() 該語句可放在查詢語句的末尾,主要用以實現(xiàn)將查詢結(jié)果以XML格式進行保存,查詢結(jié)果輸出為XML的元素,元素的名稱標記為path()所待參數(shù)。如path('aa') 則可以理解輸出的xml結(jié)構(gòu)為<aa>value</aa>形式。path參數(shù)取空字符,則直接連接查詢結(jié)果。 5、去掉重復(fù)行distinct distinct主要用于在查詢結(jié)果中去掉重復(fù)的數(shù)據(jù),如本例題需要去掉裁判重復(fù)的省份信息,因此需要在查詢的省份字段前加上distinct以實現(xiàn)去掉重復(fù)的省份信息。 6、其他所需知識 除以上所需知識之外,本例分組列數(shù)據(jù)轉(zhuǎn)行操作,其他相關(guān)知識點包括重命名 AS 方法,order by排序方法等。 編碼實現(xiàn)在明確以上問題之后我們就可以編寫SQL語句實現(xiàn)指定功能的查詢操作,本例實現(xiàn)代碼描述如下圖所示: 實現(xiàn)代碼截圖 實現(xiàn)代碼描述如上圖,代碼分析說明如下: 實現(xiàn)代碼及分析 |
|
來自: xxcc140 > 《大數(shù)據(jù)》