亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQL Server > 正文

sql 多條件組合查詢,并根據指定類別找出所有最小子類別的SQL語句備忘

2024-08-31 00:59:36
字體:
來源:轉載
供稿:網友

復制代碼 代碼如下:


DECLARE @PAGESIZE INT
DECLARE @PAGEINDEX INT

DECLARE @PAGECOUNT INT
DECLARE @RECORDCOUNT INT

SELECT @PAGESIZE=5
SELECT @PAGEINDEX=1

DECLARE @FIELDNAME VARCHAR(50)
DECLARE @FIELDVALUE VARCHAR(50)
DECLARE @OPERATION VARCHAR(50)

--組合條件
DECLARE @WHERE NVARCHAR(1000)
SELECT @WHERE=' WHERE NOTDISPLAY=0 '

DECLARE ABC CURSOR FOR
SELECT FIELDNAME,FIELDVALUE,OPERATION FROM TBPARAMETERS
OPEN ABC
FETCH NEXT FROM ABC INTO @FIELDNAME,@FIELDVALUE,@OPERATION
WHILE @@FETCH_STATUS=0
BEGIN
    IF(@OPERATION = 'Like')
        SELECT @WHERE=@WHERE + ' AND ' + @FIELDNAME + ' Like ''%'+@FIELDVALUE+'%'''
    ELSE
    BEGIN
        IF(@FIELDNAME='CLASSID')
        BEGIN
            DECLARE @ROOTID INT
            SELECT @ROOTID=@FIELDVALUE
            --將指定類別的值的子類加入臨時表
            INSERT INTO TBTEMCLASS(ID) SELECT ID FROM TBSDINFOCLASS WHERE ROOTID=@ROOTID

            --使用游標來將指定類別的最小類別提出放入臨時表
            DECLARE CLASSID CURSOR FOR
            SELECT ID FROM TBTEMCLASS
            OPEN CLASSID
            FETCH NEXT FROM CLASSID INTO @ROOTID
            WHILE @@FETCH_STATUS=0
            BEGIN
                --如果判斷有子類則將子類加入臨時表,并刪除該類別,以使游標在臨時表中循環
                IF(EXISTS(SELECT ID FROM TBSDINFOCLASS WHERE ROOTID=@ROOTID))
                BEGIN
                    INSERT INTO TBTEMCLASS(ID) SELECT ID FROM TBSDINFOCLASS WHERE ROOTID=@ROOTID
                    DELETE FROM TBTEMCLASS WHERE ID=@ROOTID
                END
                FETCH NEXT FROM CLASSID INTO @ROOTID
            END
            CLOSE CLASSID
            DEALLOCATE CLASSID

            --將自身加入臨時表
            INSERT INTO TBTEMCLASS(ID) SELECT @FIELDVALUE

            SELECT @WHERE=@WHERE +' AND CLASSID IN(SELECT ID FROM TBTEMCLASS)'
        END
        ELSE
            SELECT @WHERE=@WHERE + ' AND ' + @FIELDNAME + @OPERATION+@FIELDVALUE
    END
    FETCH NEXT FROM ABC INTO @FIELDNAME,@FIELDVALUE,@OPERATION
END
CLOSE ABC
DEALLOCATE ABC

TRUNCATE TABLE TBPARAMETERS

-- --計數語句
DECLARE @COUNTSQL NVARCHAR(500)
SELECT @COUNTSQL=N'SELECT @RECORDCOUNT=COUNT(*) FROM TBSDINFO INNER JOIN TBUSER ON TBSDINFO.USERNAME=TBUSER.USERNAME '
SELECT @COUNTSQL=@COUNTSQL+@WHERE
--
-- --執行統計
EXEC sp_executesql @COUNTSQL,
     N'@RECORDCOUNT INT OUT',
     @RECORDCOUNT OUT
--
-- --計算頁數
SET @PageCount = CEILING(@RecordCount * 1.0 / @PageSize)
--
-- --查詢語句
DECLARE @SQL NVARCHAR(2000)
DECLARE @ORDERBY VARCHAR(100)
SELECT @ORDERBY=' ORDER BY TBSDINFO.IsCommon DESC,TBSDINFO.CommonTime DESC,TBSDINFO.CreateTime DESC'

IF(@PAGEINDEX=1)
BEGIN
    SELECT @SQL='INSERT INTO TBTEMINFO(ID,TITLE,REMARK,CREATETIME,ENDTIME,WEBDOMAIN,CLASSID,CLASSNAME,TYPEID,TYPENAME,PROVINCEID,PROVINCE,CITYID,CITY,COMPANYNAME,ADDRESS,USERTYPE) '
    SELECT @SQL=@SQL+'SELECT TOP '+CONVERT(VARCHAR(4),@PAGESIZE)+' TBSDINFO.ID,TITLE,Remark,TBSDINFO.Createtime,EndTime, WebDomain,TBSDINFO.CLASSID,(SELECT CLASSNAME FROM TBSDINFOCLASS WHERE TBSDINFOCLASS.ID=TBSDINFO.CLASSID) AS CLASSNAME,TYPEID,(SELECT TYPENAME FROM TBSDINFOTYPE WHERE TBSDINFO.TYPEID=TBSDINFOTYPE.ID) AS TYPENAME,ProvinceID,(SELECT PROVINCE FROM TBPROVINCE WHERE TBPROVINCE.ID=PROVINCEID) AS PROVINCE,CityID,(SELECT CITY FROM TBCITY WHERE TBCITY.ID=CITYID) AS CITY,CompanyName,TBSDINFO.Address,UserType FROM TBSDINFO INNER JOIN TBUSER ON TBUSER.USERNAME=TBSDINFO.USERNAME'
    SELECT @SQL=@SQL+@WHERE
    SELECT @SQL=@SQL+@ORDERBY
END
ELSE
BEGIN
    DECLARE @MINRECORD INT
    SELECT @MINRECORD=(@PAGEINDEX-1)*@PAGESIZE
    SELECT @SQL='INSERT INTO TBTEMINFO(ID,TITLE,REMARK,CREATETIME,ENDTIME,WEBDOMAIN,CLASSID,CLASSNAME,TYPEID,TYPENAME,PROVINCEID,PROVINCE,CITYID,CITY,COMPANYNAME,ADDRESS,USERTYPE) '
    SELECT @SQL=@SQL+'SELECT TOP '+CONVERT(VARCHAR(4),@PAGESIZE)+' TBSDINFO.ID, TITLE,Remark,TBSDINFO.Createtime,EndTime, WebDomain,TBSDINFO.CLASSID,(SELECT CLASSNAME FROM TBSDINFOCLASS WHERE TBSDINFOCLASS.ID=TBSDINFO.CLASSID) AS CLASSNAME,TYPEID,(SELECT TYPENAME FROM TBSDINFOTYPE WHERE TBSDINFO.TYPEID=TBSDINFOTYPE.ID) AS TYPENAME,ProvinceID,(SELECT PROVINCE FROM TBPROVINCE WHERE TBPROVINCE.ID=PROVINCEID) AS PROVINCE,CityID,(SELECT CITY FROM TBCITY WHERE TBCITY.ID=CITYID) AS CITY,CompanyName,TBSDINFO.Address,UserType FROM TBSDINFO INNER JOIN TBUSER ON TBUSER.USERNAME=TBSDINFO.USERNAME'
    IF(@WHERE<>'')
        SELECT @SQL=@SQL+@WHERE+' AND '
    ELSE
        SELECT @SQL=@SQL+' WHERE '        
    SELECT @SQL=@SQL+' TBSDINFO.ID NOT IN(SELECT TOP '+CONVERT(VARCHAR(4),@MINRECORD)+' TBSDINFO.ID FROM TBSDINFO INNER JOIN TBUSER ON TBUSER.USERNAME=TBSDINFO.USERNAME '+@WHERE+@ORDERBY+')'

    SELECT @SQL=@SQL+@ORDERBY
END

--PRINT @SQL

--執行查詢
--查詢的結果是將找到的記錄放入臨時表,再通過以下游標查詢出相應的父類與根類記錄
EXEC (@SQL)

DECLARE @CLASSID INT
DECLARE @ID INT

DECLARE TEM CURSOR FOR
SELECT ID,CLASSID FROM TBTEMINFO
OPEN TEM
FETCH NEXT FROM TEM INTO @ID,@CLASSID
WHILE @@FETCH_STATUS=0
BEGIN
    DECLARE @NS VARCHAR(500)
    DECLARE @DS VARCHAR(200)

    SELECT @NS=''
    SELECT @DS=''

    DECLARE @TEMROOTID INT

    DECLARE @TEMTS VARCHAR(50)
    SELECT @CLASSID=ID,@TEMTS=CLASSNAME,@TEMROOTID=ROOTID FROM TBSDINFOCLASS WHERE ID=@CLASSID
    SELECT @NS=@TEMTS+'#'+@NS
    SELECT @DS=CONVERT(VARCHAR(10),@CLASSID)+'#'+@DS

    WHILE(@TEMROOTID>0)
    BEGIN    
        SELECT @TEMROOTID=ROOTID,@CLASSID=ID,@TEMTS=CLASSNAME FROM TBSDINFOCLASS WHERE ID=@TEMROOTID
        SELECT @NS=@TEMTS+'#'+@NS
        SELECT @DS=CONVERT(VARCHAR(10),@CLASSID)+'#'+@DS
    END

    UPDATE TBTEMINFO SET NS=@NS,DS=@DS WHERE ID=@ID

    FETCH NEXT FROM TEM INTO @ID,@CLASSID
END
CLOSE TEM
DEALLOCATE TEM


SELECT * FROM TBTEMINFO

TRUNCATE TABLE TBTEMINFO
TRUNCATE TABLE TBTEMCLASS

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97成人在线视频| 在线视频欧美日韩精品| 国产精品自拍网| 国产精品久久不能| 成人午夜在线视频一区| 日韩国产一区三区| 亚洲午夜国产成人av电影男同| 538国产精品一区二区免费视频| 亚洲自拍小视频免费观看| 国产91av在线| 国产精品观看在线亚洲人成网| 亚洲无亚洲人成网站77777| 日韩欧美中文字幕在线播放| 国产成人综合精品| 亚洲第一网站免费视频| 成人欧美一区二区三区黑人| 欧美中文字幕在线观看| 欧美精品激情blacked18| 在线观看欧美日韩国产| 亚洲美女www午夜| 97成人精品视频在线观看| 日本精品视频在线观看| 亚洲一区二区精品| 欧美日本中文字幕| 亚洲成人精品视频| 欧美与欧洲交xxxx免费观看| 国产在线观看精品一区二区三区| 国产精品自拍偷拍视频| 在线成人免费网站| 日韩av片免费在线观看| 日韩欧美高清在线视频| 欧美日韩高清在线观看| 久久久精品国产一区二区| 亚洲视频在线播放| 亚洲精品国精品久久99热一| 国产精品久久久久久久久久东京| 91国产在线精品| 91国内免费在线视频| 欧美日韩国产一区中文午夜| 国产精品国产自产拍高清av水多| 亚洲激情电影中文字幕| 色偷偷亚洲男人天堂| 欧美在线性爱视频| 国产综合视频在线观看| 91精品久久久久久久久久| 57pao成人国产永久免费| 色系列之999| 欧美视频在线观看免费| 日韩亚洲一区二区| 亚洲性生活视频在线观看| 久久伊人91精品综合网站| 国产精品视频自拍| 国产精品毛片a∨一区二区三区|国| 热re99久久精品国产66热| 久久久精品一区二区三区| 中日韩美女免费视频网址在线观看| 亚洲欧美制服综合另类| 欧美激情视频播放| 北条麻妃一区二区三区中文字幕| 一区二区三区视频在线| 色yeye香蕉凹凸一区二区av| 欧洲美女免费图片一区| 亚洲国产精品视频在线观看| 高清日韩电视剧大全免费播放在线观看| 日韩美女视频在线观看| 国产成人avxxxxx在线看| 欧美大尺度电影在线观看| 欧美精品在线第一页| 久久99久久久久久久噜噜| 国产欧美一区二区三区在线看| 亚洲天堂av在线免费| 另类天堂视频在线观看| 国产婷婷色综合av蜜臀av| 日韩成人av在线| 欧美激情在线狂野欧美精品| 欧美裸体xxxxx| 亚洲精品视频免费在线观看| 91精品视频网站| 色偷偷av一区二区三区| 国产视频自拍一区| 国产精品久久久久久久久久小说| 最新国产精品拍自在线播放| 欧美日韩一区二区免费视频| 69av视频在线播放| 国产视频在线观看一区二区| 国产精品88a∨| 久久久精品久久久久| 久久99久久99精品免观看粉嫩| 亚洲色图15p| 国产91亚洲精品| 秋霞成人午夜鲁丝一区二区三区| 色777狠狠综合秋免鲁丝| 欧美激情视频三区| 97久久久免费福利网址| 伊人青青综合网站| 欧美激情国产日韩精品一区18| 日本久久久久久久久久久| 亚洲国产日韩精品在线| 亚洲曰本av电影| 欧洲成人免费视频| 亚洲精品电影在线| 一区二区三区视频免费在线观看| 国产精品午夜一区二区欲梦| 亚洲永久免费观看| 欧美在线激情网| 亚洲精品www久久久久久广东| 国产精品欧美一区二区三区奶水| 亚洲第一黄色网| 欧美日韩中国免费专区在线看| 国产精品免费观看在线| 国产亚洲欧美另类中文| 538国产精品视频一区二区| 91国产视频在线播放| 国产免费久久av| 91黄色8090| 精品人伦一区二区三区蜜桃免费| 中文字幕一区电影| 国外视频精品毛片| 亚洲国产中文字幕在线观看| 欧美精品在线视频观看| 欧美黄色片在线观看| 欧美理论电影网| 久久69精品久久久久久国产越南| 91av视频在线观看| 久久久久久免费精品| 久久电影一区二区| 久久久综合av| 日韩av在线免费观看| 久久在线免费观看视频| 成人黄色大片在线免费观看| 自拍偷拍亚洲精品| 亚洲国产成人精品电影| 久久99久国产精品黄毛片入口| 日韩欧美在线观看视频| 最好看的2019年中文视频| 4438全国成人免费| 欧美精品videos| 欧美日韩成人黄色| 日韩av网址在线观看| 亚洲乱亚洲乱妇无码| 欧美精品在线播放| 欧美日韩中文字幕日韩欧美| 亚洲激情国产精品| 国产精品老牛影院在线观看| 日韩成人在线视频观看| 中文字幕亚洲欧美日韩在线不卡| 亚洲一二三在线| 伊人久久大香线蕉av一区二区| 国产97色在线|日韩| 亚洲国产小视频在线观看| 色先锋久久影院av| 国产精品久久久久久久一区探花| 国产精品自拍偷拍视频| 欧美日韩一区二区精品| 国产午夜一区二区| 欧美一级大片在线免费观看| 国产成人aa精品一区在线播放| 久久久久国产精品免费网站| 日韩天堂在线视频| 国产亚洲激情在线| 日韩日本欧美亚洲| 欧美一区二区色| 日韩精品中文在线观看| 国产精品自产拍高潮在线观看|