-1

以下のコードには複数の where 条件が含まれています

select SUM(COMMONSPEC.DISBURSE_AMT)
  from spec_gt1 COMMONSPEC
  where COMMONSPEC.instance_code_1 = 3
  OR COMMONSPEC.instance_code_2 = 3
  OR COMMONSPEC.instance_code_3 = 3
  OR COMMONSPEC.instance_code_4 = 3
  OR COMMONSPEC.instance_code_5 = 3;

いずれかの条件が null を返すため、 AND条件を使用したクエリはnull を返しますが、 OR条件を使用したクエリは異なる結果を返します。サブクエリを書かずにどうすれば達成できますか。何か方法はありますか

4

3 に答える 3

0

あなたはで試すことができAndますis Not null

select SUM(COMMONSPEC.DISBURSE_AMT)
         from spec_gt1 COMMONSPEC
        where (COMMONSPEC.instance_code_1 =
             3 and COMMONSPEC.instance_code_1 is not null)
          OR (COMMONSPEC.instance_code_2 =
              3 and COMMONSPEC.instance_code_2 is not null)
          OR (COMMONSPEC.instance_code_3 =
              3 and COMMONSPEC.instance_code_3 is not null)
          OR (COMMONSPEC.instance_code_4 =
              3 and COMMONSPEC.instance_code_4 is not null)
          OR (COMMONSPEC.instance_code_5 =
              3 and COMMONSPEC.instance_code_5 is not null)
于 2013-11-11T11:02:16.343 に答える
0

使用できますCOALESCE

SELECT
          SUM ( DISBURSE_AMT )
    FROM
          SPEC_GT1
    WHERE
          COALESCE ( INSTANCE_CODE_1,
                   INSTANCE_CODE_2,
                   INSTANCE_CODE_3,
                   INSTANCE_CODE_4,
                   INSTANCE_CODE_5 ) = 3;

このサンプルを試すことができます:

WITH SPEC_GT1
    AS (SELECT
             1 AS DISBURSE_AMT,
             3 AS INSTANCE_CODE_1,
             3 AS INSTANCE_CODE_2,
             3 AS INSTANCE_CODE_3,
             NULL AS INSTANCE_CODE_4,
             3 AS INSTANCE_CODE_5
        FROM
             DUAL
        UNION ALL
        SELECT
             2 AS DISBURSE_AMT,
             3 AS INSTANCE_CODE_1,
             3 AS INSTANCE_CODE_2,
             3 AS INSTANCE_CODE_3,
             3 AS INSTANCE_CODE_4,
             3 AS INSTANCE_CODE_5
        FROM
             DUAL
        UNION ALL
        SELECT
             3 AS DISBURSE_AMT,
             3 AS INSTANCE_CODE_1,
             NULL AS INSTANCE_CODE_2,
             3 AS INSTANCE_CODE_3,
             3 AS INSTANCE_CODE_4,
             3 AS INSTANCE_CODE_5
        FROM
             DUAL
        UNION ALL
        SELECT
             4 AS DISBURSE_AMT,
             3 AS INSTANCE_CODE_1,
             3 AS INSTANCE_CODE_2,
             2 AS INSTANCE_CODE_3,
             3 AS INSTANCE_CODE_4,
             3 AS INSTANCE_CODE_5
        FROM
             DUAL)
SELECT
      SUM ( DISBURSE_AMT )
FROM
      SPEC_GT1
WHERE
      COALESCE ( INSTANCE_CODE_1,
               INSTANCE_CODE_2,
               INSTANCE_CODE_3,
               INSTANCE_CODE_4,
               INSTANCE_CODE_5 ) = 3
于 2013-11-11T11:22:59.653 に答える
0

AND および OR 演算子

First of all you have to know about what is AND and OR?
When AND is placed the all columns values are match to 3.

例:

where COMMONSPEC.instance_code_1 = 3
  AND COMMONSPEC.instance_code_2 = 3
  AND COMMONSPEC.instance_code_3 = 3
  AND COMMONSPEC.instance_code_4 = 3
  AND COMMONSPEC.instance_code_5 = 3;

When OR is placed if any one column value is match to 3 
then it will show the record.

例:

where COMMONSPEC.instance_code_1 = 3
  OR COMMONSPEC.instance_code_2 = 3
  OR COMMONSPEC.instance_code_3 = 3
  OR COMMONSPEC.instance_code_4 = 3
  OR COMMONSPEC.instance_code_5 = 3;
于 2013-11-11T11:05:55.397 に答える