質問
次の表から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;
列ごとに繰り返します。
所属していません StackOverflow