select sum(express) from a table
其中express为:case when (含有子查询的布尔表达式) then num1
                else num2 end这样的形式在MS SQL7中是支持的. 你再试试.

解决方案 »

  1.   

    SQL Book Online中有线详细的说明,SQL与Access有细微的差别
      

  2.   

    請注意了,
    如果是像這種寫法是不正確的:
    Select table1.FldN, SUM( CASE WHEN (SELECT COUNT(*) From table2)>0 THEN table1.Field1 ELSE table1.Field2 END ) From table1即會提示這類似這樣的錯誤:
    Cannot perform an aggregate function on an expression containing an aggregate or a subquery.
      

  3.   

    SQL SERVER中确实支持When Case 语句,大概是您的"含有子查询的布尔表达式"除了问题.
      

  4.   

    SQL SERVER
    Select  sum(ncount)  AS  n1 , count(nid)    AS  n2,   sum(case (nzcjy%18) when 0 then 1 else 0 end ) AS szcjy2 FROM .....ORACLE
    Select  sum(ncount) n1 ,  count(nid)   n2,  sum(decode(MOD(nzcjy,18),0,1,0))  szcjy2 FROM .....ACCESS
    Select sum(ncount)  AS  n1 ,  count(nid)    AS  n2,   sum(iif((nzcjy MOD 18) =0,1,0)) AS   szcjy2 FROM .....SYBASE
      

  5.   

    N_chow(一劍飄香):
      老兄一语中的,我就是想实现如此功能,若sql不支持,请问有何高招,解决此问题,
    关键是工作需要,最好不用存储过程,分几步实现,难道sql server还不如access,
    但愿是我学艺不精,请高手指点迷津!多谢!必有高分奉送!
      

  6.   

    如果是這樣,那稍稍變通一下就可以了。
    DECLARE @cnt int
    SELECT @cnt=COUNT(*) From table2
    SELECT SUM(CASE WHEN @cnt>0 THEN Fld1 ELSE Fld2 END ) From table1
      

  7.   

    N_chow(一劍飄香):
      我在做同时适用于Access和Sql server的一个过程,
    你的方法不能直接应用,但还是谢谢你的热心,以后多交流,
    如有空,请告知E-mail地址,现送上20分,别嫌少.
      

  8.   

    to perter_zt():
        如果你把情況說清楚一點,我想是會有辦法解決的。
        我的e-mail : [email protected]