2014-02-06 32 views
0

我有一個存儲基本站點信息的表,另一個存儲站點地址的表以及第三個電話表。我的電話表包含電話號碼和號碼類型。根據第三列將信息分類爲兩個新列的SQL查詢

我想要做的是獲取我的網站信息,主要聯繫電話號碼和傳真號碼。到目前爲止,我的發言是這樣的:

SELECT site.isiteid, 
    site.iclientid, 
    csitecode, 
    csitename, 
    binactive, 
    caddress1, 
    caddress2, 
    ccity, 
    cstateid, 
    czip, 
    icountryid, 
    cattention, 
    cemail, 
    cnumber, 
    cextension 
FROM dbo.site 
    INNER JOIN dbo.address 
     ON dbo.site.isiteid = dbo.address.isiteid 
      AND (site.isiteid = 2) 
    LEFT JOIN dbo.phone 
     ON dbo.site.isiteid = dbo.phone.isiteid 
      AND (dbo.phone.iphtypeid = 1) 

這讓我所有的,我需要除傳真號碼信息(dbo.phone.iphtypeid = 3)。有沒有辦法給名爲[fax]的結果添加另一列,並在site.isiteid = phone.isiteid和phone.iphtypeid = 3時填充它?因此,最後的4列返回將[cemail][cnumber][cextension][cfax].

議決

謝謝所有三個誰回答。所有的答案都是相似的,所以我選擇了最詳細的解釋。我確實需要將表名添加到cnumber引用和cextension中以避免含糊不清。感謝您的回覆!

回答

1

是的,你可以通過添加另一個連接到dbo.phone來做到這一點。要區分這兩種用法,您需要爲第二次加入別名。所以,像這樣:

SELECT site.isiteid, 
    site.iclientid, 
    csitecode, 
    csitename, 
    binactive, 
    caddress1, 
    caddress2, 
    ccity, 
    cstateid, 
    czip, 
    icountryid, 
    cattention, 
    cemail, 
    phone.cnumber, 
    phone.cextension, 
    phone_fax.cnumber AS cfax 
FROM dbo.site 
    INNER JOIN dbo.address 
     ON dbo.site.isiteid = dbo.address.isiteid 
      AND (site.isiteid = 2) 
    LEFT JOIN dbo.phone 
     ON dbo.site.isiteid = dbo.phone.isiteid 
      AND (dbo.phone.iphtypeid = 1) 
    LEFT JOIN dbo.phone AS phone_fax 
     ON dbo.site.isiteid = phone_fax.isiteid 
      AND (phone_fax.iphtypeid = 3) 
2

添加另一個JOIN條款

LEFT JOIN dbo.phone f 
ON dbo.site.isiteid = f.isiteid 
AND f.iphtypeid = 3 

這樣,你會添加f.cfax到SELECT列表。

給別的表別名也可能很好,所以你可以區分哪些列來自哪個表。

+0

難道你不需要在ON子句中使用'f'別名嗎? – Tadmas

+0

別名手機作爲F忽略別名...我不知道()也是必要的。 – Zane

+0

@Tadmas修復答案。感謝您指出。 – TTeeple

1

你可以做一些類似的事情,即使我不確定你是如何定義表格的。

SELECT site.isiteid, 
    site.iclientid, 
    csitecode, 
    csitename, 
    binactive, 
    caddress1, 
    caddress2, 
    ccity, 
    cstateid, 
    czip, 
    icountryid, 
    cattention, 
    cemail, 
    cnumber, 
    cextension, 
    CASE WHEN C.iphtypeid = 3 THEN C.cnumber ELSE NULL END [cfax] 
FROM dbo.site A 
    INNER JOIN dbo.address 
     ON dbo.site.isiteid = dbo.address.isiteid 
      AND (site.isiteid = 2) 
    LEFT JOIN dbo.phone C 
     ON A.isiteid = C.isiteid 
+1

我不認爲這會奏效。我期望的要求是,在「cnumber」中需要主電話號碼(類型1),而「cfax」中需要傳真號碼。這將最終爲每種電話類型返回多行。我只通過一次連接就可以看到你想要做什麼 - 我知道如何做到這一點的唯一方法就是進行樞軸轉動,這可能有點矯枉過正。 – Tadmas

相關問題