0

テーブルを作成しましたが、別のテーブルから行を挿入しています。ただし、これらの行の一部には、他のテーブルからの結合が必要です。私の知る限り、これはステートメントでサブクエリ select ステートメントを使用することを意味します。問題は、サブクエリが 1 つの結果しか返さないことです。レコードが存在しない場合に -1 を返したいと思っています。これは私が使用している例ですが、機能していません:

    INSERT INTO [BDW_ReportPrototype].[dbo].[CustomerCreditFact]
    ( [MortgageDimID]
       ,[LeaseDimID]
       ,[OREODimID]
       ,[OfficerTypeDimID] )
    SELECT 
    --[MortgageDimID]
 -2
    --LeaseDimID
,-2
    --OREODimID
,-2
,CASE WHEN OfficerTypeDimID IS NULL THEN -1 ELSE OfficerTypeDimID END 
FROM Staging_FDB_LN_CPDM_Daily LCD  
LEFT OUTER JOIN ERMA..OfficerTypeDim  OTD  on OTD.OfficerNum = LCD.OFFICER 
FROM dbo.Staging_FDB_LN_CPDM_Daily
4

3 に答える 3

2

このSQL文を試してください

SELECT CASE WHEN OfficerTypeDimID IS NULL THEN -1 ELSE OfficerTypeDimID END
    FROM Staging_FDB_LN_CPDM_Daily LCD 
    LEFT OUTER JOIN ERMA..OfficerTypeDim  OTD  on OTD.OfficerNum = LCD.OFFICER
于 2012-05-30T16:50:00.640 に答える
1

次のようにクエリを作り直します。

まず、サブクエリの代わりにクエリで LEFT OUTER JOIN を使用します。このタイプの結合は、「他の」テーブルに行が存在する可能性があることを示していますが、存在しない可能性がありますが、関係なく行を戻したいと考えています。

すべての行があることがわかったので、そこに値があるかどうかを確認したいと思うでしょう。合体機能を使用して、省略形で保守が容易なチェックを使用します。これは基本的に値のリスト (列名、変数、またはハードコードされた値) であり、オプティマイザーはリストから最初の非 null 値を選択して使用します。ここでは、クエリに -1 を指定します

INSERT INTO 
    [BDW_ReportPrototype].[dbo].[CustomerCreditFact]
(
    [OfficerTypeDimID]
)
SELECT
    -- coalesce returns the first non-null value
    COALESCE(OTD.OfficerTypeDimID, -1) AS OfficerTypeDimID
FROM 
    dbo.Staging_FDB_LN_CPDM_Daily LCD
    LEFT OUTER JOIN
        ERMA..OfficerTypeDim OTD
        ON OTD.OfficerNum = LCD.OFFICER
于 2012-05-30T16:53:26.487 に答える
0

多分これらの線に沿った何か...

INSERT INTO [BDW_ReportPrototype].[dbo].[CustomerCreditFact]
    ([OfficerTypeDimID])
    Select OfficerTypeDimID 
        from ERMA..OfficerTypeDim  OTD 
        inner JOIN  Staging_FDB_LN_CPDM_Daily LCD 
        on OTD.OfficerNum = LCD.OFFICER
   UNION ALL 
   SELECT -1
   FROM dbo.Staging_FDB_LN_CPDM_Daily LCD
   WHERE NOT EXISTS 
   (
    Select OfficerTypeDimID from ERMA..OfficerTypeDim  
   OTD 
   WHERE
   OTD.OfficerNum = LCD.OFFICER

   )
于 2012-05-30T16:51:15.797 に答える