0

私は2つのテーブルを持っていてrawtabletradetable

生テーブル

rawid companyname uniqueID 
1      AAA-XA         9CV
2      BBB-DEMO       10K
3      CCC-XOXO       7D

取引可能

tradeid securityname CUSIP
1       AAACOMP      9CV
2       BBBCOMP      10K

今、私が必要としているのはcompanyname、fromrawtableが少し混ざっているので、会社名としてsecuritynamefromを使用する必要があるtradetableため、LEFT JOIN を使用しました

declare DataSourceId = 3;
SELECT DISTINCT
    @DataSourceId,
    dbo.CleanText(tradetable.securityname)
FROM    tradetable 
    LEFT JOIN
    (
        SELECT DISTINCT 
            companyname,
            uniqueID 
        FROM
            rawtable 
    ) rawtable ON tradetable.cusip =  rawtable. uniqueID 

これは私にnamesfromを与えますtradetableが、ここでは from の新しい一致しない名前を見逃すでしょうが、rawtableそれらの名前も欲しいのですが、select ステートメントで

私が使用する場合

declare DataSourceId = 3;
SELECT DISTINCT
        @DataSourceId,
        dbo.CleanText(rawtable.securityname) --instead of tradetable 

次に、間違った混合名を選択します

では、どうすればこの問題を解決できますか? または別の場所から、好きなように正しい名前を実行する必要がありますtradetable securityname

私が期待した出力:

生テーブル

companyname uniqueID 
AAA-XA         9CV
BBB-DEMO       10K
CCC-XOXO       7D

取引可能

securityname CUSIP
AAACOMP      9CV
BBBCOMP      10K

I WANT Asecuritynameつまりcompanyname、一致しているかどうかを確認している適切な形式で、からuniqueID 取得securitynameしますtradetable

追加のレコードがrawtableあるCCC_XOXO場合、実際の名前はそうかもしれませんCCCので、3番目のテーブルにある場所CCCから取得する必要CCCがありますか、それとも他の方法はありますか?

その3番目のテーブルをJOINにもインポートする必要があることを意味しますか?

4

1 に答える 1

1

から値を取得したいということtradetableで、存在しない場合はから取得しrawtableますか? このように(sqlfiddle)?

SELECT dbo.CleanText(COALESCE(t.securityname,r.companyname)) AS companyname,
    COALESCE(t.CUSIP,r.uniqueID) AS uniqueID
FROM rawtable r
LEFT OUTER JOIN tradetable t ON r.uniqueID = t.CUSIP

出力は次のとおりです。

COMPANYNAME UNIQUEID
AAACOMP CV
BBBCOMP 10K
CCC-XOXO 7D
于 2012-07-27T18:24:06.173 に答える