国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

SQL實現交叉表的方法

來源:懂視網 責編:小采 時間:2020-11-09 09:17:54
文檔

SQL實現交叉表的方法

SQL實現交叉表的方法:--交叉一般來講是分組統計的一種,形式更復雜,顯示更清淅,但數據庫本身并沒有提供實---現交叉表的功能,自己創建交叉表不僅要對過程、游標、臨時表、動態SQL等非常熟悉,而--且思路也要清淅,本例以PUBS.DBO.SALES表的數據做樣本: CREATE PROC
推薦度:
導讀SQL實現交叉表的方法:--交叉一般來講是分組統計的一種,形式更復雜,顯示更清淅,但數據庫本身并沒有提供實---現交叉表的功能,自己創建交叉表不僅要對過程、游標、臨時表、動態SQL等非常熟悉,而--且思路也要清淅,本例以PUBS.DBO.SALES表的數據做樣本: CREATE PROC

--交叉一般來講是分組統計的一種,形式更復雜,顯示更清淅,但數據庫本身并沒有提供實---現交叉表的功能,自己創建交叉表不僅要對過程、游標、臨時表、動態SQL等非常熟悉,而--且思路也要清淅,本例以PUBS.DBO.SALES表的數據做樣本:
CREATE PROCEDURE UP_TEST(
@T1 VARCHAR(30),@T2 VARCHAR(30),
@T3 VARCHAR(30),@T4 VARCHAR(30)) AS
--T1 表名,T2,T3是交叉表的兩上分類字段,T4是匯總字段
--T2是行字段,T3列字段
BEGIN
DECLARE @SQL VARCHAR(7999),@FIELD VARCHAR(30)
 SELECT @SQL='SELECT DISTINCT '+@T3+' FROM '+@T1
 CREATE TABLE #FIELD(FIELD VARCHAR(30))
 --將列字段提取到臨時表#FIELD中
 INSERT INTO #FIELD EXEC(@SQL)
 SELECT @SQL='CREATE TABLE CROSS_TEST('+@T2+' VARCHAR(30),'
 DECLARE CUR_FIELD CURSOR LOCAL FOR SELECT * FROM #FIELD
 OPEN CUR_FIELD
 FETCH CUR_FIELD INTO @FIELD
 WHILE @@FETCH_STATUS=0 BEGIN
 SELECT @FIELD='['+@FIELD+']'
SELECT @SQL=@SQL+@FIELD+' DECIMAL(8,2) DEFAULT 0,'
 FETCH CUR_FIELD INTO @FIELD
 END
 SELECT @SQL=LEFT(@SQL,LEN(@SQL)-1)+')'
 --創建臨時交叉表CROSS_TEST
 EXEC(@SQL)
 SELECT @SQL='INSERT INTO CROSS_TEST('+@T2+') SELECT DISTINCT '+@T2+' FROM '+@T1
--將行數據存入交叉表#CROSS_TEST
EXEC(@SQL)
 --創建分組數據表TEMP
 SELECT @SQL='CREATE TABLE TEMP('+@T2+' VARCHAR(30),'+@T3+' VARCHAR(30),'+@T4+' DECIMAL(8,2))'
 EXEC(@SQL) 
 --將交叉匯總數據放入交叉表
 SELECT @SQL='SELECT '+@T2+','+@T3+', SUM(QTY) QTY FROM '+@T1 +' GROUP BY '+@T2+','+@T3
 INSERT INTO TEMP EXEC(@SQL)
 --將匯總數據寫入交叉表
 DECLARE CUR_SUM CURSOR LOCAL FOR SELECT * FROM TEMP
 DECLARE @F1 VARCHAR(30),@F2 VARCHAR(30),@QTY DECIMAL(8,2),@Q1 VARCHAR(30)
 OPEN CUR_SUM
 FETCH CUR_SUM INTO @F1,@F2,@QTY
 WHILE @@FETCH_STATUS=0 BEGIN
 SELECT @F2='['+@F2+']',@Q1=CAST(@QTY AS VARCHAR(30))
 SELECT @SQL='UPDATE CROSS_TEST SET '+@F2+'='+@Q1+' WHERE '+@T2+'='''+@F1+''''
 EXEC(@SQL)
 FETCH CUR_SUM INTO @F1,@F2,@QTY
 END
 CLOSE CUR_SUM
 SELECT * FROM CROSS_TEST
 DROP TABLE TEMP 
 DROP TABLE CROSS_TEST
 DROP TABLE #FIELD
END
--------------------------------------------------------
EXEC UP_TEST 'SALES','TITLE_ID','STOR_ID','QTY'
/*說明:字段加中括號為了處理字段中含有特殊字符,值得注意得是要實現交叉表的表必須有兩個分類,本例只支持分類字段的數據類型是字符型的,最大的問題就是高亮顯示這行的WHERE條件啦,字符類型字段查詢時條件必須加單引號,如果是數值類型就可以直接寫,所以數值類型的分類字段更容易實現一些,更可以融合在一個過程中。通常大家看到的交叉表都有行匯總與列匯總等信息,本例就沒有實現,最后一點工作大家自己練練手吧。*/

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

SQL實現交叉表的方法

SQL實現交叉表的方法:--交叉一般來講是分組統計的一種,形式更復雜,顯示更清淅,但數據庫本身并沒有提供實---現交叉表的功能,自己創建交叉表不僅要對過程、游標、臨時表、動態SQL等非常熟悉,而--且思路也要清淅,本例以PUBS.DBO.SALES表的數據做樣本: CREATE PROC
推薦度:
標簽: 方法 實現 sql
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 日本啊v | 热久久国产欧美一区二区精品 | er久99久热只有精品国产 | 97久久综合区小说区图片专区 | 国产精品一区二区三区四区 | 国产在线精彩视频 | 国产一区二区三区精品视频 | 精品国产一区二区三区2021 | 国产一级特黄高清免费下载 | 精品国产一区二区三区免费看 | 精品久久久久久久久中文字幕 | 久久精品国产欧美日韩99热 | 欧美国产激情二区三区 | 爽妇网s | 天天操综| 日韩欧美精品在线观看 | 国内精品久久久久影院不卡 | 亚洲综合一区二区三区 | 91香蕉国产亚洲一区二区三区 | 免费一级毛片 | 国产精品久久久久… | 国产一级视频 | 在线播放国产精品 | 亚洲视频第一页 | 亚洲专区欧美专区 | 欧美在线看欧美视频免费网站 | 国产精品成人麻豆专区 | 国产美女精品久久久久中文 | 欧美人善交| 精品久久一区二区 | 免费国产精品视频 | 亚洲午夜久久久久久久久电影网 | 亚洲欧美日韩激情在线观看 | 99视频都是精品热在线播放 | 日韩色网| 欧美日韩国产精品va | 欧美啪啪网 | 国产毛片在线看 | 看国产一级毛片 | 国产成人+综合亚洲+天堂 | 看全色黄大色大片免费久久 |