2012-07-29 18 views
0

我正在使用的數據庫(我無法更新或修改其中的任何內容,我只能查詢它以獲取我創建的報告)是以相當奇怪的方式建立。有時信息需要一百萬張中介表才能到達,而有時候所有信息都在同一張表中。從多個條件下的1個表查詢而不會生成多行

爲了得到獨一無二的地址,我需要,我一定要參加3個表(包含表的發票信息,它包含了一些分配給每個組織到包含數據庫中的所有組織表密鑰表)。三張桌子中的最後一張擁有每一家公司,但公司可以擁有不同的角色(例如,一家公司可以是供應商,一家可以是客戶,也可以是合作伙伴等),所以桌子上有一個「類型」一欄,上面寫着1 =供應商,2 =客戶等在那裏

的示例代碼和數據均低於作用(對不起,我似乎無法得到表得以正確格式化這裏):

select * from a 
join b on a.id=b.id 
join c on b.orgid=c.orgid 

數據:

a.OrderID b.Organization c.Role 
-----------------------------------------  
    123  Acme Inc.   1 
    123  Roadrunner Inc.  2 
    123  Venture Co.   2 

我在做需求拉動的順序編號,供應商,客戶和PA查詢rtner,但無論我如何加入或如何嘗試使用WITH語句,它都會生成3行,其中每行中三個角色中的一個被命名,其餘爲NULL。

任何人都可以提供幫助嗎?

非常感謝您花時間閱讀這個冗長的問題。

+0

這聽起來像你有重複的記錄角色數據庫,公司具有NULL角色。要麼,要麼你的查詢真的是使用左/右外連接。你能檢查這些東西嗎? – 2012-07-29 15:59:35

+1

如果您發佈代碼,XML或數據樣本,請在文本編輯器中突出顯示這些行,然後單擊編輯器工具欄上的「代碼示例」按鈕(「{}」)以良好地格式化並語法突出顯示 – 2012-07-29 16:33:08

+0

+1對於請求用於表格結構和示例代碼。另外,我想指出你遇到的問題是相當普遍的,而不是「奇怪的」。擁有三個表格只是意味着數據庫被設計爲處理多對多關係(儘管我覺得很奇怪訂單可能屬於多個客戶)。如果您使用(幾乎)任何數據庫,則通過關係映射表連接兩個信息表是常見的事情。 – Diego 2012-07-29 19:13:33

回答

0

這是否讓你更接近你想要的結果

;with cteOrgRoles as 
(
select b.id, b.orgid, organization, role 
from b 
    inner join c on b.orgid = c.orgid 
) 
    select 
     a.*, 
     r1.organization as role1, 
     r2.organization as role2 
    from a 
     left join cteOrgRoles r1 on a.id = r1.id and r1.role=1 
     left join cteOrgRoles r2 on a.id = r2.id and r2.role=2 

你會得到重複在不同的角色列,如果你有其他角色的多個條目