可以限制值插入的次数吗?

时间:2016-02-12 16:46:46

标签: sql

我有一个带有以下内容的临时表(该表有1064条记录,其中包含25种不同的RevID。每个RevID当前列在表中,计数在30-55倍之间。每个DegreeNo在表中4次并且要求一个不同的RevID。目标是让表中的每个RevID具有相同的次数。在这种情况下,每个RevID的计数应为22。

目标:1。将RevID分配给DegreeNo,其中Major不等于short_plan 2. RevID只能分配22次。

TempNomTable

**RevID    DegreeNo   Major**
UF1        12345678    SOCIOL
UF3        12345678    SOCIOL
UGK        12345678    SOCIOL
KHS        12345678    SOCIOL
UF25       01234555    DESIGN
UF6        01234555    DESIGN
UF1        01234555    DESIGN
UF3        01234555    DESIGN

#TempR TABLE

**RevID     SHORT_PLAN**
UF1       DENTIST
UF2       VET
UF3       GUESS
UF4       HR
UF5       DESIGN
... 
...

mult_nom TABLE

**DegreeNo   Major  comp_id**
 12345678    SOCIOL   2
 01234555    DESIGN   2

这是插入临时表的查询:

    WITH Match_NWithR AS(
    SELECT DISTINCT 
    DegreeNo, 
    RTRIM(Major) AS Major,
    COUNT(1) as rowcnt, 
    comp_id
FROM  #mult_nom
GROUP BY  DegreeNo, 
         RTRIM(Major),
         comp_id
)
, rownum_matches AS (
SELECT  m.DegreeNo, 
        m.Major,
        t.Revid,
        m.rowcnt,
        m.comp_id,
       ROW_NUMBER() OVER (PARTITION BY m. DegreeNo order by newid()) AS rownum

       FROM Match_NWithR m
      join #tempR t ON t.short_plan != m.major 
      GROUP BY  m.DegreeNo, m.Major,
      t.RevID, m.rowcnt, m.comp_id
      HAVING COUNT(t.RevID) <= 22
  )

  INSERT INTO #TempNomTable
  SELECT  RevID,  DegreeNo, Major, comp_id   FROM rownum_matches rm 
  WHERE rownum <= rowcnt 
  group by RevID, DegreeNo, Major, comp_id
  HAVING COUNT(RevID) <= 22

我甚至尝试使用更新光标来更新RevID如果计数是&gt; 22但这也不起作用。任何建议将不胜感激。

0 个答案:

没有答案