2012-07-27 54 views
0

我有兩個表rawtabletradetable如何在需要執行第一個表列值時進行JOIN?

rawtable

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

tradetable

tradeid securityname CUSIP 
1  AAACOMP  9CV 
2  BBBCOMP  10K 

現在我需要的是從rawtablecompanyname是有點混,所以我需要有securitynametradetable作爲公司名稱爲我所用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 

,這將給我從tradetablenames但在這裏我將rawtable錯過了新的不匹配的名字,但我想那些名太多,但在select語句

如果我用

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

那麼我會選擇錯誤的混合名稱

那麼,怎樣才能解決我這個問題?或從別的地方我需要進行正確的名稱,我想它像tradetablesecurityname

輸出I預期:

rawtable

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

tradetable

securityname CUSIP 
AAACOMP  9CV 
BBBCOMP  10K 

我想要一個securitynamecompanyname以適當的格式爲我檢查uniqueID 如果匹配那麼它會從tradetable

NOW

securityname當存在rawtable加法記錄像CCC_XOXO被那裏它的實際名稱可能是CCC因此,爲了採取CCC我應該採取CCC從它出現在第三表中或有任何其他方式嗎?

意味着我需要在我的JOIN中導入第三個表格嗎?

+4

我讀過你的問題兩次,但我不明白。也許增加一些例子輸出? – Andomar 2012-07-27 18:19:21

回答

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 
+0

+1,我覺得OP確實需要這個,但是用'companyname'包裝在dbo.CleanText()中,就像在原始查詢中一樣。 – 2012-07-27 18:26:08

+0

@NikolaMarkovinović好的,我可以把它包起來。很高興你以同樣的方式理解這個問題。 – 2012-07-27 18:36:05

+0

我在寫類似的答案。但是,我認爲OP會讓我們感到驚訝;-) – 2012-07-27 18:40:03

相關問題