2

SQLでisnullまたはifnullステートメントの反対を使用する方法を理解できないようです。a.Error1ifが null でないと言う必要があります。次に、 the' - 'と + を出力しCHAR(13)+CHAR(10)ます。a.Error1 が null に戻った場合、基本的にダッシュや改行はありません。したがって、フィールドが null でない場合は情報を出力します。

select a. .... 
' - ' + a.Error1 + CHAR(13)+CHAR(10) + 
' - ' + a.Error2 + CHAR(13)+CHAR(10) + 
' - ' + a.Error3 + CHAR(13)+CHAR(10) + 
' - ' + a.Error4 + CHAR(13)+CHAR(10) + 
' - ' + a.Error5 + CHAR(13)+CHAR(10) + 
' - ' + a.Error6                      as 'error_message'
... 
from table1 a 

たとえば、特定のレコードに対してエラー 1、2、および 5 が出力を返した場合、出力を次のようにしたいと考えて い
ます 。


その行にエラーが存在しない場合は、単に空/null フィールドにする必要があります。

4

4 に答える 4

2

COALESCE関数は、ここで必要なことを行います。COALESCE の結果は、渡された最初の NOT NULL 値です。以下では、外側の + が常に NOT NULL 文字列に適用されるように、NULL とは異なる '' を使用しています。

例えば

select a. .... 
    COALESCE( ' - ' + a.Error1 + CHAR(13)+CHAR(10), '' ) + 
    COALESCE( ' - ' + a.Error2 + CHAR(13)+CHAR(10), '' ) + 
    COALESCE( ' - ' + a.Error3 + CHAR(13)+CHAR(10), '' ) + 
    COALESCE( ' - ' + a.Error4 + CHAR(13)+CHAR(10), '' ) + 
    COALESCE( ' - ' + a.Error5 + CHAR(13)+CHAR(10), '' ) + 
    COALESCE( ' - ' + a.Error6 , '' ) as 'error_message'
... 
from table1 a
于 2015-01-26T16:57:31.363 に答える
0
SELECT (CASE WHEN a.Error1 IS NOT NULL
            THEN ' - ' + a.Error1 + CHAR(13)+CHAR(10) +
            ELSE a.Error1
            END) +
      (CASE WHEN a.Error2 IS NOT NULL
            THEN ' - ' + a.Error2 + CHAR(13)+CHAR(10) +
            ELSE a.Error2
            END) +
    .....etc
于 2015-01-26T15:54:44.537 に答える