0

if..else 条件を SQL 内に書き込もうとしています。"Company" テーブルから会社名を取得したいのですが、companyID の companyID が NULL である場合、print "N/A" con 誰かが助けてくれます

SELECT [contactID]
      ,[customerID]
      ,(SELECT Label.labelContactType FROM  Label WHERE Label.labelContactTypeID = Customer_Contacts.labelContactTypeID)AS Type
      ,[contactDetails]
      ,[status]
      ,[notes]
      ,CASE WHEN [Customer_Contacts].companyID = NULL THEN 'N/A'
        WHEN [Customer_Contacts].companyID  <> NULL THEN (SELECT [companyName]
        FROM [TaskManagementSystem_DB].[dbo].[Company] WHERE [Company].companyID = [Customer_Contacts].companyID)
        END AS Company

  FROM [TaskManagementSystem_DB].[dbo].[Customer_Contacts]

  WHERE customerID = 24
4

5 に答える 5

8

「= NULL」の代わりに「IS NULL」を、「<> NULL」の代わりに「IS NOT NULL」を使用してみてください。

于 2012-12-17T20:58:07.010 に答える
3

JOINこのクエリにa を使用しないのはなぜですか。

SELECT cc.[contactID]
    ,cc.[customerID]
    ,l.labelContactType AS Type
    ,cc.[contactDetails]
    ,cc.[status]
    ,cc.[notes]
    , COALESCE(cp.[companyName], 'N/A') AS Company
FROM [TaskManagementSystem_DB].[dbo].[Customer_Contacts] cc
LEFT JOIN [TaskManagementSystem_DB].[dbo].[Company] cp
    on cc.companyID = cp.companyID
LEFT JOIN Label l
    on cc.labelContactTypeID = l.labelContactTypeID
WHERE cc.customerID = 24

結合構文のヘルプが必要な場合は、結合の視覚的な説明をご覧ください。

于 2012-12-17T20:59:32.657 に答える
1

sを使用してこれを実際に書き直しますJOIN。より読みやすく、保守しやすく、より効率的になります。現在行っていることは、相関サブクエリを実装することです (そのうちの 2 つ。1 つはラベル用、もう 1 つは会社名用です)。JOINs で書き直され、読みやすいように再フォーマットされたクエリは次のとおりです。

SELECT 
    cust.[contactID]
    ,cust.[customerID]
    ,l.labelContactType AS Type
    ,cust.[contactDetails]
    ,cust.[status]
    ,cust.[notes]
    ,ISNULL(comp.companyName, 'N/A') AS Company
FROM 
    [TaskManagementSystem_DB].[dbo].[Customer_Contacts] cust
LEFT JOIN
    [TaskManagementSystem_DB].[dbo].[Label] l
    ON
    cust.labelContactTypeID = l.labelContactTypeID
LEFT JOIN
    [TaskManagementSystem_DB].[dbo].[Company] comp
    ON
    cust.companyID = comp.companyID
WHERE 
    cust.customerID = 24

JOIN構文に慣れていない場合は、構文を調査します。

于 2012-12-17T21:02:25.350 に答える
1

あなたは「働いていない」という意味を言いません。「機能していない」とはどういう意味かを正確に言うことが重要です - 間違った結果を返しますか? エラーをスローしますか?

この場合、'=' で NULL をテストしていて、ANSI_NULLS が ON であることが問題だと思います。「キーワード 'then' 付近の構文が正しくありません」や「キーワード 'as' 付近の構文が正しくありません」のようなメッセージが表示される場合は、これが問題だと思います。

その場合は、いくつかのことを行うことができます。1. を回しANSI_NULLS OFFます。これはお勧めしません。2. =NULLIS NULLおよび<> NULLに変更しIS NOT NULLます。これが私が推奨するアプローチです。

于 2012-12-17T21:31:18.743 に答える
0

がON (デフォルトおよび標準設定) の場合、または構成SET ANSI_NULLSを使用して列を NULL と比較する必要があります。a_column IS NULLa_column IS NOT NULL

SET ANSI_NULLSが OFF の場合、等しい ( )=と等しくない ( <>) は機能しますが、標準ではありません。ANSI_NULL のデフォルト設定を変更しないことをお勧めします。

于 2012-12-17T21:22:19.373 に答える