2010-11-15 100 views
2

我有以下實體加入查詢與扁平結果

alt text

地址類型是簡單枚舉字段定義電子郵件是否是個人/工作/其他。

是否有可能做一個查詢,返回一個扁平的結果,如下面的示例中的結果?

CustomerID Full Name  Personal Email   Work Email 
----------- -------------- -----------------  ----------------------- 
1    John Doe  [email protected] [email protected] 
+1

+1僞手繪模式;那是什麼工具? – RedFilter 2010-11-15 14:47:37

+1

'http:// yuml.me /':) – Lorenzo 2010-11-15 14:49:28

回答

1

兩個主要選擇:

1)選擇它作爲典型的(兩排,每個郵箱),然後使用pivot操作趨於平緩。

pivot實例(我把它叫做一個例子,因爲我在記事本寫的可能稍有不妥,但它應該指向你以正確的方式。):

select 
    CustomerID, 
    FullName 
    [1] as WorkEmail, 
    [2] as HomeEmail 
from 
    (select 
    c.CustomerID, c.FullName, e.AddressText, e.AddressType 
    from 
    Customer c 
    join emails e on e.CustomerID = c.CustomerID) as Source 
pivot (
    AddressText 
    FOR AddressType in ([1], [2]) 
) 

2)加入到電子郵件表兩次,每種類型的地址一次。建議外部連接,所以如果一個人失蹤,你仍然會得到另一個。

+0

您能給我一個第一個案例的樣本嗎?第二個是明確的,但在我的情況下會有點混亂,因爲枚舉中的值是七...謝謝! – Lorenzo 2010-11-15 14:51:03

2
select c.CustomerID, 
    c.FullName as [Full Name], 
    epersonal.AddressText as [Personal Email], 
    ework.AddressText as [Work Email] 
from Customer c 
left outer join Email epersonal on c.CustomerID = epersonal.CustomerID 
    and epersonal.AddressType = 'personal' 
left outer join Email ework on c.CustomerID = ework.CustomerID 
    and epersonal.AddressType = 'work'