我有一个统计报表其中用到了如下的SQL语句,
SELECT TOP 1 (SELECT Count(*) AS 局级 FROM employee WHERE (now - 出生年月) < (30*365) And 待遇级别='局级'  and (人员分类 = '干管' or 人员分类 = '工管') and 现工作单位 = :P1) AS 局级总数, (SELECT Count(*) AS 处级 FROM employee WHERE (now - 出生年月) < (30*365) And 待遇级别='处级'  and (人员分类 = '干管' or 人员分类 = '工管') and 现工作单位 = :P1)
遇到的问题是:能否让P1一次接受多个值呢?个数不一定,或者有其他的什么办法?望大家给一点意见吧。

解决方案 »

  1.   

    如果现工作单位不是很多,那就用两个参数变量...SELECT TOP 1 (SELECT Count(*) AS 局级 FROM employee WHERE (now - 出生年月) < (30*365) And 待遇级别='局级'  and (人员分类 = '干管' or 人员分类 = '工管') and 现工作单位 = :P1) AS 局级总数, (SELECT Count(*) AS 处级 FROM employee WHERE (now - 出生年月) < (30*365) And 待遇级别='处级'  and (人员分类 = '干管' or 人员分类 = '工管') and 现工作单位 = :P2)
      

  2.   

    SELECT TOP 1 (SELECT Count(*) AS 局级 FROM employee WHERE (now - 出生年月) < (30*365) And 待遇级别='局级'  and (人员分类 = '干管' or 人员分类 = '工管') and CharIndex(现工作单位 ,:P1)>0) AS 局级总数, (SELECT Count(*) AS 处级 FROM employee WHERE (now - 出生年月) < (30*365) And 待遇级别='处级'  and (人员分类 = '干管' or 人员分类 = '工管') and CharIndex(现工作单位 ,:P1)>0)P1可以有很多个单个名称,但注意名称之间用一个","分隔开。
    Charindex是SQLSERVER中的一个包含函数,类似POS函数。
      

  3.   

    你说的"现工作单位"上限是24个不多啊,那就多写P1--P24个参数... 有些处理还写有200多个的AND或则200多个的OR啊... 要不你到SQL版去问看看了,有没更好的方法?...那里是很专业的....
      

  4.   

    我又试着用这样的办法:
    SELECT Count(*) AS 局级
    FROM employee
    WHERE (now()-出生年月)<(30*365) And 待遇级别='局级' And (人员分类='干管' Or 人员分类='工管') And 现工作单位 In ([:P1]);
    如输入两个单位值如:INTEL,IBM。 如果单一输入能正确识别得到结果,而同时输入则是将它们看作一个单位。有没有其他什么方法?
      

  5.   

    同时输入则是将它们看作一个单位,那是肯定第一个是默认的了,IN也相当于包含LIKE多个的意思,就不能把第二、或第三个给它参与计算了建议还是写P1--P24个参数还快
      

  6.   

    或者不用传递参数,直接用CommandText更好。
    假设有一个变量DWSTR:='(intel,ibm,sun)';完全可以这样写:
    ADODateSet1.close;
    ADODateSet1.CommandText:='SELECT TOP 1 (SELECT Count(*) AS 局级 FROM employee WHERE (now - 出生年月) < (30*365) And 待遇级别='局级'  and (人员分类 = '干管' or 人员分类 = '工管') and 现工作单位 in '+dwstr+') AS 局级总数, (SELECT Count(*) AS 处级 FROM employee WHERE (now - 出生年月) < (30*365) And 待遇级别='处级'  and (人员分类 = '干管' or 人员分类 = '工管') and 现工作单位 in '+dwstr+')'
      

  7.   

    陈SIR:我也准备采用你的方法。然而,根据需要,我必须构建一个临时表。
    ACCESS数据库
    我在一个ADOQUERY中用到如下语句: 
    adoquery1.Close;
    adoquery1.SQL.Clear;
    adoquery1.SQL.Add('select * into table1 from employee where 现工作单位 in('+edit1.text+') ');
    adoquery1.Open;
    然而执行后抱错说:“当前程序不支持从单一执行返回多个记录集”.这个问题该如何解决呢?