0

2 つのテーブルがあります (SQL サーバー):

  1. errorcode(code, utctime, fileversion)

  2. errordescr(code, fileversion, description)

errorcode特定の utctime での障害の履歴が含まれています。

エラーは、errordescr テーブルの説明にマップされます。

バージョンがテーブルに存在しない場合は、デフォルトの fileversion 値 (defaultversion) を使用したいerrordescrので、特定のエラーのデフォルトの説明を取得できます。

- にエラーのファイルバージョンが存在するerrordescrが、コードが に登録されてerrordescrいない場合、説明に NULL を返したい、「defaultversion」からデフォルトの説明を取得したくない。

私の問題は、クエリを実行すると、正しいバージョンに説明がある場合でも、「defaultversion」から一致が得られることです。

ありがとう

SELECT TOP 50000 sn, utctime, mydb.dbo.error.code, description FROM mydb.dbo.error 
LEFT OUTER JOIN mydb.dbo.errordescr
ON(
   (
      mydb.dbo.error.fileversion=mydb.dbo.errordescr.fileversion
      OR
      mydb.dbo.errordescr.fileversion='defaultversion'      
   )
   AND
   mydb.dbo.error.code=mydb.dbo.errordescr.code
)

ORDER BY utctime DESC

例: エラーのあるエントリ:

1. code: 001, utctime: 1970-01-01 00:00:00:000, fileversion: v1.0
2. code: 002, utctime: 1970-01-01 00:00:00:000, fileversion: v2.0
3. code: 003, utctime: 1970-01-01 00:00:00:000, fileversion: v3.0
4. code: 002, utctime: 2000-01-01 00:00:00:000, fileversion: v1.0

errordescr のエントリ:

1. code: 001, fileversion: v1.0, description: "error code #1 from file v1.0"
2. code: 002, fileversion: v1.0, description: "error code #2 from file v2.0"
3. code: 003, fileversion: defaultversion, description: "error code #3 from default"

結果は次のようになります。

すべてのエラーを表示:

1. code: 001, utctime: 1970-01-01 00:00:00:000, fileversion: v1.0, description: "error code #1 from file v1.0"

2. code: 002, utctime: 1970-01-01 00:00:00:000, fileversion: v2.0, description: "error code #2 from file v2.0"

3. code: 003, utctime: 1970-01-01 00:00:00:000, fileversion: v3.0, description:"error code #3 from default"

4. code: 002, utctime: 2000-01-01 00:00:00:000, fileversion: v1.0, description: NULL
4

1 に答える 1

1

試す:

SELECT TOP 50000 sn, utctime, mydb.dbo.error.code, case when description is null then 'defaultversion'  else description End
FROM mydb.dbo.error 
LEFT OUTER JOIN mydb.dbo.errordescr
ON       mydb.dbo.error.fileversion=mydb.dbo.errordescr.fileversion
   AND   mydb.dbo.error.code=mydb.dbo.errordescr.code
ORDER BY utctime DESC
于 2013-07-16T14:30:07.827 に答える