Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

wybierz top N dynamicznie za pomocą N z tej samej instrukcji select

Możesz użyć row_number() zrobić zasadniczo to samo:

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

Możesz to trochę uprościć, ale nie wiem, czy flag pochodzi z du lub ss.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak skonfigurować pocztę bazy danych w SQL Server

  2. Funkcja podzieliła ciąg na ułamki dziesiętne?

  3. Len() vs datalength() w SQL Server 2005

  4. Związek między dwoma wymiarami w SSAS

  5. Jak zrobić stronicowanie w SQL Server 2008