Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

изберете top N динамично с N от същия оператор за избор

Можете да използвате row_number() да направи по същество същото нещо:

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

Може да успеете да опростите това малко, но не знам дали flag идва от du или 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. Обръщане на резултатите от съхранена процедура?

  2. Инструкция CASE WHEN за клауза ORDER BY

  3. Как да получите стойностите на колоната в SQL, разделени със запетая

  4. VARCHAR(MAX) се държи странно при конкатениране на низ

  5. Какъв е низът за sql връзка, който трябва да използвам за достъп до localhost\SQLEXPRESS с удостоверяване на Windows или SQL удостоверяване?