sql >> Databasteknik >  >> RDS >> Sqlserver

välj top N dynamiskt med N från samma select-sats

Du kan använda row_number() att göra i princip samma sak:

WITH DataToInsert AS
(
    Select AgentID, Surveys, LOB,(case when day(getdate())<4 then 3 else (day(getdate())) - (Surveys*3) end) SampleSize from Current_Agent_SurveyCount_HSI Where surveys<8 
)
Insert Into Survey_Source_New (LOB, CenterName, CallDate, AgentZid, TN, Ticket, RecordingID, Cycle, [TimeStamp])  
    select LOB, CenterName, CallDate, AgentZid, TN, Ticket, RecordingID, Cycle, [TimeStamp]
    from (Select ss.LOB, CenterName, CallDate, AgentZid, TN, Ticket, RecordingID, Cycle, [TimeStamp],
                 row_number() over (order by newid()) as seqnum
          From Survey_source_Level1 ss inner join
               DataToInsert du on ss.AgentZID=du.agentID
          where flag is null and du.samplesize<7
         ) t
    where seqnum <= du.sample_size

Du kanske kan förenkla detta lite, men jag vet inte om flag kommer från du eller ss.



  1. Mysql ordning genom att använda två kolumner

  2. Problem med radnummer för SQL Server-lagrad procedur

  3. Hur man konfigurerar PostgreSQL Sharding med ClusterControl

  4. Hur läser jag en , som <br /> i PHP/MySQL?