zoukankan      html  css  js  c++  java
  • 临时表,分组排序,分页

    ALTER PROCEDURE Proc_GetPreBuyResumeBase
        @ResumeSourceSite varchar(100) = '51Job',    --目标网站
        @ContactState varchar(50) = '',                --购买导入状态
        @ResumeCodeType    varchar(5),                --查询简历ID类型:简历现ID[0]/简历源ID[1]
        @ResumeCode varchar(20) = '',                --简历ID
        @CityID varchar(100),                        --分站
        @OrderSet varchar(50),                        --排序设置
        @BuyNum varchar(5) ,                        --购买数量
        @Size int,                                    --页面显示最大数量
        @Index varchar(10),                            --页面当前索引
        @Count int output                            --带回当前条件查询数
    AS
    BEGIN    
        DECLARE @sql nvarchar(4000)
        
        CREATE TABLE #ResumeBase (
            ResumeID uniqueidentifier PRIMARY KEY
            ,JobSeekerID uniqueidentifier
            ,ResumeCode varchar(64)
            ,ResumeSourceSite varchar(20)
            ,ResumeSourceID varchar(64)
            ,UpdateDate datetime
            ,CreateDate datetime)
            
        CREATE TABLE #BuyResume(ResumeID uniqueidentifier PRIMARY KEY, Quantity int, ValidQuantity int)
        
        --
        INSERT INTO #BuyResume(ResumeID, Quantity, ValidQuantity)
        SELECT ResumeID, COUNT(ResumeID) Quantity, SUM(CASE WHEN DATEDIFF(day, BuyDate, GETDATE()) <= 7 THEN 1 ELSE 0 END) ValidQuantity
        FROM BuyNoContactResume
        GROUP BY ResumeID
            
        IF (@ResumeCode = '')
            INSERT INTO #ResumeBase(
                ResumeID
                ,JobSeekerID
                ,ResumeCode
                ,ResumeSourceSite
                ,ResumeSourceID
                ,UpdateDate
                ,CreateDate)
            SELECT
                ResumeID
                ,JobSeekerID
                ,ResumeCode
                ,ResumeSourceSite
                ,ResumeSourceID
                ,UpdateDate
                ,CreateDate
            FROM dbo.ResumeBase
            WHERE ResumeSourceSite = @ResumeSourceSite
                AND ResumeID IN (SELECT ResumeID FROM #BuyResume)
        ELSE--简历编号不为空
        BEGIN
            IF (@ResumeCodeType = '0')--简历现ID
                INSERT INTO #ResumeBase(
                    ResumeID
                    ,JobSeekerID
                    ,ResumeCode
                    ,ResumeSourceSite
                    ,ResumeSourceID
                    ,UpdateDate
                    ,CreateDate)
                SELECT
                    ResumeID
                    ,JobSeekerID
                    ,ResumeCode
                    ,ResumeSourceSite
                    ,ResumeSourceID
                    ,UpdateDate
                    ,CreateDate
                FROM dbo.ResumeBase
                WHERE ResumeCode = @ResumeCode
                    AND ResumeID IN (SELECT ResumeID FROM #BuyResume)
            ELSE                    --简历源ID
                INSERT INTO #ResumeBase(
                    ResumeID
                    ,JobSeekerID
                    ,ResumeCode
                    ,ResumeSourceSite
                    ,ResumeSourceID
                    ,UpdateDate
                    ,CreateDate)
                SELECT
                    ResumeID
                    ,JobSeekerID
                    ,ResumeCode
                    ,ResumeSourceSite
                    ,ResumeSourceID
                    ,UpdateDate
                    ,CreateDate
                FROM dbo.ResumeBase
                WHERE ResumeSourceSite = @ResumeSourceSite
                    AND ResumeSourceID = @ResumeCode
                    AND ResumeID IN (SELECT ResumeID FROM #BuyResume)
        END
        
        CREATE INDEX IX_ResumeBaseTemp_JobSeekerID ON #ResumeBase(JobSeekerID ASC);
        
        CREATE TABLE #TempRecord (IndexID int
            ,ResumeID uniqueidentifier
            ,ResumeCode varchar(64)
            ,ResumeSourceSite varchar(20)
            ,ResumeSourceID varchar(64)
            ,Quantity int
            ,ValidQuantity int
            ,UpdateDate datetime
            ,CreateDate datetime
            ,CityID varchar(20)
            ,ContactState tinyint)

        IF (@ContactState = '')
            SET @ContactState = '0,1,2'    
        
        SET @sql = '
        SELECT IndexID = ROW_NUMBER() OVER(ORDER BY ' + @orderSet + '), t.*
        FROM (
                SELECT
                    rb.ResumeID
                    ,rb.ResumeCode
                    ,rb.ResumeSourceSite
                    ,rb.ResumeSourceID
                    ,b.Quantity
                    ,b.ValidQuantity
                    ,rb.UpdateDate
                    ,rb.CreateDate
                    ,i.CityID
                    ,i.ContactState
                FROM
                    #ResumeBase rb
                    JOIN JobSeekerInfo i ON i.JobSeekerID = rb.JobSeekerID
                    JOIN #BuyResume b ON b.ResumeID = rb.ResumeID
                WHERE
                    i.CityID IN (SELECT Rowvalue FROM dbo.f_split(''' + @CityID + ''', '',''))
                    and b.Quantity >= ' + @BuyNum + '
                    AND i.ContactState IN(SELECT Rowvalue FROM dbo.f_split(''' + @ContactState + ''', '',''))
            ) t'

        --PRINT (@sql)
        
        INSERT INTO #TempRecord
        EXEC (@sql)
                        
        --返回统计数
        SELECT @count = max(IndexID) from #TempRecord
        --返回数据
        SELECT * FROM #TempRecord tmp
        WHERE IndexID > (@index*@Size) and IndexID<=((@index + 1) * @Size)
        DROP TABLE #TempRecord
    END
  • 相关阅读:
    第十三节:实际开发中使用最多的监视锁Monitor、lock语法糖的扩展、混合锁的使用(ManualResetEvent、SemaphoreSlim、ReaderWriterLockSlim)
    第十二节:深究内核模式锁的使用场景(自动事件锁、手动事件锁、信号量、互斥锁、读写锁、动态锁)
    第十一节:深究用户模式锁的使用场景(异变结构、互锁、旋转锁)
    第十节:利用async和await简化异步编程模式的几种写法
    第九节:深究并行编程Parallel类中的三大方法 (For、ForEach、Invoke)和几大编程模型(SPM、APM、EAP、TAP)
    C# DataTable列名不区分大小写
    如何很好的使用Linq的Distinct方法
    Java读写记事本文件
    c# 获取方法所在的命名空间 类名 方法名
    C#中类的序列化和反序列化
  • 原文地址:https://www.cnblogs.com/ylemzhang/p/1632154.html
Copyright © 2011-2022 走看看