背景:药房有5个配药窗口,分别是1至5号。当然,要考虑到以后可能会有调整到6个、7个的可能。
收费窗口打印发票时,自动打印“请到药房第N号窗口取药”。现在要解决的就是这个N的赋值问题。要求要平均分配。比如说,1至5号窗口都开放的话,就是1,2,3,4,5,
1,2,3,4,5…………这样分配。患者少的时候,比如说晚上,可能只有两个窗口开放,比如说1号窗口和5号窗口,那就1,5,1,5,1,5……这样每个配药窗口配一台电脑,电脑自动打印机分配到本窗口的处方条码,配药师拿着条码去备药。表名:
DrugWindow配药窗口(字段1:windowcode窗口号,字段2 IsActive)两个字段都是整型,其中IsActive值是0的表示该窗口关闭,1表示开放。
求赋N值的SQL语句或存储过程。(可以另建一个表,如果需要)

解决方案 »

  1.   

    1、如果不考虑有效窗口变化,比较简单,加张新的表,记录上次开药的窗口号(要是允许的话,直接在DrugWindow配药窗口表后面加上一个标识字段即可),下次再排号的时候,SELECT出有效的窗口号
    比上次记录窗口大的第一个,更改标识指标,返回当前窗口号。
    2、如果要考虑有效窗口的变化及平均分配人数到各窗口,可以新增一张表用来记录各个窗口,等待的人数。每次开发票时,查出,有效窗口中,等待人数最少的一个(按照窗口号排序),记录+1,然后返回窗口号
      

  2.   

    最简单的就是:
    select top 1 '请到药房第' + windowcode窗口号 + '号窗口取药' from DrugWindow
    where IsActive = 1但是第一个窗后的工作量肯定是最多的,如果工作量安排要平均,那么你需要另外一个表,表中按顺序放入开放的窗口,从上往下取,如果一个窗口被占用了,那么从表中删除,如果又有空余了,在填入表内,放在最后。