質問

次の表からContactDate、SortName、City、ContactType、およびSummaryを返すSQLクエリが必要です。値がnullの場合、テキスト“ No Entry”を返す必要があります。

ContactTable

  • ContactID
  • ContactDate
  • ユーザーID
  • 概要
  • ContactType
  • SortName

UserTable

  • UserID
  • ラストネーム
  • AddressID

AddressTable

  • AddressID
  • ストリート
  • Zip
役に立ちましたか?

解決

SELECT COALESCE(CAST(CONVERT(VARCHAR(10), ContactTable.ContactDate, 101) AS VARCHAR(10)), 'No Entry') AS ContactDate,
       COALESCE(ContactTable.SortName, 'No Entry') AS SortName,
       COALESCE(AddressTable.City, 'No Entry') AS City,
       COALESCE(ContactTable.ContactType, 'No Entry') AS ContactType
FROM ContactTable
LEFT OUTER JOIN UserTable ON ContactTable.UserID = UserTable.UserID
LEFT OUTER JOIN AddressTable ON UserTable.AddressID = AddressTable.AddressID

こちらは、上記のCONVERTステートメントのSQL DateTime形式のグラフです。

他のヒント

ソルトの重量に見合うプラットフォームでのCOALESCE()。

キャストの問題を必ず処理してください。

例:

--(SQL Server)
SELECT
  C.ContactID,
  COALESCE(CAST(CONVERT(varchar(10), C.ContactDate, 101) AS varchar(10), 'No Entry') AS ContactDate,
  COALESCE(SorName, 'No Entry') AS SortName

など。

SELECT 
  ISNULL(ContactDate, 'No Entry') AS ContactDate
FROM Table

ISNULLの使用は非常に簡単です。

この関数のOracleバージョンは nvl と呼ばれます。同じ使用法- SELECT nvl(col_name、desired_value)FROM foo

これのより一般的なバージョンは decode で、3つのパラメーターがあり、置換を実行する列値を指定できます(したがって、すべての「Johnny」を「John 'または何か)。

IIF 」の使用はAccess DBソリューションですが、他のDBでも機能する場合があります。

SELECT IIF(IsNull(Foo), 'No Entry' ,Foo), IIF(IsNull(Bar), 'No Entry' ,Bar) From TableName   

関数IIFは、式の評価に応じて2つの値のいずれかを返します。
SQL構文:       IIF(expression、true-value1、false-value)

列ごとに異なる呼び出しを行うこともできます。より多くの個別の呼び出しが必要になりますが、更新する行が多くない場合は高速になる可能性があります。

update ContactTable
set ContactDate = 'No Entry'
where ContactDate is null;

列ごとに繰り返します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top