1

計算フィールドをとして作成するビューを(MS sql 2008を使用して)作成していCOLUMN1 + COLUMN2ます。すべてがうまくてダンディですが、両方ともCOLUMN1NULLにCOLUMN2することができます。

次のルールに従いたい:

  • 2 + 2 = 4
  • 2 + NULL = 2
  • NULL + 2 = 2
  • 0 + 0 = 0
  • NULL + NULL = NULL

ISNULL(column2、0)を使用すると、すべてのルールが実行されますが、最後のルールは実行されません。

ビューを作成するにはどうすればよいですか

CREATE VIEW dbo.test
AS
SELECT COLUMN1, COLUMN2, (????????) AS CALCULATEDCOL FROM dbo.TabTest;
GO
4

9 に答える 9

3
create view dbo.test AS 
    select
        column1, 
        column2,
        case
            when column1 is null and column2 is null then null
            -- or when isnull(column1, column2) is null then null
            else isnull(column1, 0) + isnull(column2, 0)
        end as CALCULATEDCOL 
    from dbo.TabTest
于 2012-11-01T14:56:07.747 に答える
3
CASE  
      WHEN COALESCE(COLUMN1, COLUMN2) IS NULL THEN NULL
      ELSE ISNULL(COLUMN1, 0) + ISNULL(COLUMN2, 0)
END 
于 2012-11-01T14:57:15.287 に答える
3

caseステートメントなしでこれを行うことができます:

select coalesce(column1+column2,
                coalesce(column1, 0) + column2,
                column1 + coalesce(column2, 0)
               )

(この関数coalesceは と同等ですがisnullcoalesceは標準 SQL であり、3 つ以上の引数を取ることができます。)

caseステートメントを使用することに不利な点はありません。私はこれを代替手段として提供しているだけです。

于 2012-11-01T15:01:32.517 に答える
2

CASE代わりに式を使用してください。そのようです:

CREATE VIEW dbo.test AS 
  SELECT 
    COLUMN1, 
    COLUMN2,
    CASE  
      WHEN COLUMN1 IS NULL AND COLUMN2 IS NULL THEN NULL
      WHEN COLUMN1 IS NULL THEN 0 + COLUMN2
      WHEN COLUMN2 IS NULL THEN 0 + COLUMN1
      ELSE COLUMN1 + COLUMN2
    END AS CALCULATEDCOL 
  FROM dbo.TabTest; 
GO
于 2012-11-01T14:53:55.547 に答える
1

COALESCE という標準関数がある場合、この質問に CASE を使用するのは無駄です。疑問符を次のように置き換えてください。

COALESCE(col1 + col2, col1, col2)
于 2012-11-01T17:14:29.823 に答える
0

a を使用しCASEて、最後の条件を処理できます。

CREATE VIEW dbo.test
AS
 SELECT column1,
        column2,
        CASE
            WHEN column1 IS NULL
                THEN column2 + 0
            WHEN column2 IS NULL
                THEN column1 + 0
            WHEN column1 IS NOT NULL AND column2 IS NOT NULL
                THEN column1 + column2
        ELSE NULL
        END AS calculatedcol
  FROM  dbo.tabtest; 
于 2012-11-01T14:53:07.050 に答える
0

あなたのルールは、「両方のフィールドがnullでない限り、nullをゼロとして扱い、その場合はnullを返す」のようです。case2 つのルールを分離するために、これにアプローチします。

CASE WHEN column1 is null and column2 is null then null
ELSE ISNULL(column1,0) + ISNULL(column2,0)
END
于 2012-11-01T14:56:57.540 に答える
0

ケースシステムを使用して、どちらかの値が NULL の場合から両方の値が null の場合を処理できます。

CREATE VIEW dbo.test
AS
  SELECT COLUMN1, COLUMN2, 
    CASE WHEN (COLUMN1 IS NULL AND COLUMN2 IS NULL) THEN NULL 
    ELSE ISNULL(COLUMN1,0)+ISNULL(COLUMN2,0) 
    END  AS CALCULATEDCOL 
FROM dbo.TabTest;
GO
于 2012-11-01T14:57:04.380 に答える
0

これを実現するには、 caseキーワードを使用できます。

これらの行に何か

SELECT CASE 
WHEN COLUMN1 IS NULL AND COLUMN2 IS NULL THEN NULL 
WHEN COLUMN1 IS NULL AND... etc...
于 2012-11-01T14:58:39.480 に答える