还是举例说:
一个表有字段A(字符型)、字段B(整形),都有无重复约束。现在给定2个参数X(字符型)、Y(整形),按以下条件查询结果标志1、找出是否有满足条件 (A=X) AND (B=Y)  的记录(同一条记录中)  返回结果标志:1
2、找出是否有满足条件 (A=X) AND (B<>Y) 的记录(同一条记录中)  返回结果标志:2
3、找出是否有满足条件 (A<>X) AND (B=Y) 的记录(同一条记录中)  返回结果标志:3
4、找出是否有满足条件:其中一条记录(A=X) 且有另一条记录(B=Y) (或反之)  返回结果标志:4这个实现是不是一次查找无法实现?如果能实现怎么写?
我现在用笨办法,就是找4次,然后还得根据查找结果进行相应记录更新什么的操作,目前数据还少没问题,如果数据多了估计不好了(是静态数据,而且不估计多于10W)今天在试用的时候发现和查找顺序以及返回结果后的处理顺序有关,呵呵。

解决方案 »

  1.   

    SELECT CASE WHEN ((A=X) AND (B=Y)) THEN 1
    WHEN ((A=X) AND (B<>Y)) THEN 2
    WHEN ((A<>X) AND (B=Y)) THEN 3
    WHEN (EXISTS(SELECT * FROM TargetTable WHERE (A=X)) 
    AND EXISTS (SELECT * FROM TargetTable WHERE (B=Y))) THEN 4
        ELSE 0 END AS GetDataRslt
    FROM TargetTable
    或者四个都作为子查询放入不同的列也行的!
      

  2.   

    SELECT A.C1Count,A.C2Count,A.C3Count,
      CASE WHEN (A.C41Count > 0) AND (A.C42Count > 0) THEN 1
           ELSE 0 END AS C4Count
    FROM 
    (SELECT (SELECT COUNT(*) FROM TargetTable WHERE ((A=X) AND (B=Y))) AS C1Count,
          (SELECT COUNT(*) FROM TargetTable WHERE ((A=X) AND (B<>Y))) AS C2Count,
      (SELECT COUNT(*) FROM TargetTable WHERE ((A<>X) AND (B=Y))) AS C3Count,
      (SELECT COUNT(*) FROM TargetTable WHERE (A=X)) AS C41Count,
      (SELECT COUNT(*) FROM TargetTable WHERE (B=Y)) AS C42Count) A
      

  3.   

    多谢 lengyuehui 
    SQL语法用的少,总是感觉下不了手....我来试试顺便再带一个问题:还能不能更进一步,就是根据查询的结果直接进行一些操作:比如Update/Delete等操作这样就不要先查询,然后再更新操作什么的SELECT CASE WHEN ((A=X) AND (B=Y)) THEN ()             //结果为1不操作
    WHEN ((A=X) AND (B<>Y)) THEN (Update Tbl SET B=Y)      //不返回结果了,直接更新操作
    WHEN ((A<>X) AND (B=Y)) THEN (Update Tbl SET A=X)      //不返回结果了,直接更新操作
    WHEN (EXISTS(SELECT * FROM TargetTable WHERE (A=X))  
    AND EXISTS (SELECT * FROM TargetTable WHERE (B=Y))) THEN (删除A=X的这条记录,同时把B=Y的这条记录的A更新为X)  //这个比较麻烦了,伪代码都不懂的怎么写了...
      

  4.   

    条件都是一样的,改一下语句。但update和delete语句要分开写。
      

  5.   

    用case when处理,条件就是and/or组合; 体力活