国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
SQL實(shí)現(xiàn)交叉表的方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
--交叉一般來講是分組統(tǒng)計(jì)的一種,形式更復(fù)雜,顯示更清淅,但數(shù)據(jù)庫(kù)本身并沒有提供實(shí)---現(xiàn)交叉表的功能,自己創(chuàng)建交叉表不僅要對(duì)過程、游標(biāo)、臨時(shí)表、動(dòng)態(tài)SQL等非常熟悉,而--且思路也要清淅,本例以PUBS.DBO.SALES表的數(shù)據(jù)做樣本:
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))
 --將列字段提取到臨時(shí)表#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)+')'
 --創(chuàng)建臨時(shí)交叉表CROSS_TEST
 EXEC(@SQL)
 SELECT @SQL='INSERT INTO CROSS_TEST('+@T2+') SELECT DISTINCT '+@T2+' FROM '+@T1
--將行數(shù)據(jù)存入交叉表#CROSS_TEST
EXEC(@SQL)
 --創(chuàng)建分組數(shù)據(jù)表TEMP
 SELECT @SQL='CREATE TABLE TEMP('+@T2+' VARCHAR(30),'+@T3+' VARCHAR(30),'+@T4+' DECIMAL(8,2))'
 EXEC(@SQL) 
 --將交叉匯總數(shù)據(jù)放入交叉表
 SELECT @SQL='SELECT  '+@T2+','+@T3+', SUM(QTY) QTY FROM '+@T1 +' GROUP BY '+@T2+','+@T3
 INSERT INTO TEMP EXEC(@SQL)
 --將匯總數(shù)據(jù)寫入交叉表
 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'
/*說明:字段加中括號(hào)為了處理字段中含有特殊字符,值得注意得是要實(shí)現(xiàn)交叉表的表必須有兩個(gè)分類,本例只支持分類字段的數(shù)據(jù)類型是字符型的,最大的問題就是高亮顯示這行的WHERE條件啦,字符類型字段查詢時(shí)條件必須加單引號(hào),如果是數(shù)值類型就可以直接寫,所以數(shù)值類型的分類字段更容易實(shí)現(xiàn)一些,更可以融合在一個(gè)過程中。通常大家看到的交叉表都有行匯總與列匯總等信息,本例就沒有實(shí)現(xiàn),最后一點(diǎn)工作大家自己練練手吧。*/
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
循環(huán)一個(gè)表
交叉表、行列轉(zhuǎn)換和交叉查詢經(jīng)典
(轉(zhuǎn))行變列SQL語(yǔ)句(MSSQL) - jack - 博客園
在SQL Server中如何獲取某用戶對(duì)某個(gè)表中所有權(quán)限
DB2常用SQL的寫法(持續(xù)更新中...)
cursor 與refcursor及sys_refcursor的區(qū)別 - Phoenix_...
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服