2009-10-28 78 views
1
Table 1 
------- 
LANG_VALUE 
LANG_DESC 

Table 2 
------- 
EmpId 
LANG1 
LANG2 
LANG3 
LANG4 
LANG5 
LANG6 

它看起來像如下:連接兩個表 - 多列單列

Table 1 
------- 

LANGVALUE LANGDESC 
------------------- 
SPAN  SPANISH 
GERM  GERMAN 

Table 2 
------- 
EmpId LANG1 LANG2 LANG3 LANG4 LANG5 LANG6 
----------------------------------------- 
1  SPAN NULL NULL NULL NULL NULL 
2  GERM SPAN NULL NULL NULL NULL 
3  GERM NULL NULL NULL NULL NULL 

預期結果:

EmpId LANG1 LANG2 LANG3 LANG4 LANG5 LANG6 
----------------------------------------- 
1  SPANISH NULL ... 
2  GERMAN SPANISH NULL... 
3  GERMAN NULL... 

如何做到這一點的SQL查詢?

回答

2
SELECT EmpId, 
    K1.LANGDESC AS LANG1, 
    K2.LANGDESC AS LANG2, 
    K3.LANGDESC AS LANG3, 
    K4.LANGDESC AS LANG4, 
    K5.LANGDESC AS LANG5, 
    K6.LANGDESC AS LANG6 
FROM Table2 T 
LEFT JOIN Table1 K1 ON K1.LANGVALUE = T.LANG1 
LEFT JOIN Table2 K2 ON K2.LANGVALUE = T.LANG2 
LEFT JOIN Table3 K3 ON K3.LANGVALUE = T.LANG3 
LEFT JOIN Table4 K4 ON K4.LANGVALUE = T.LANG4 
LEFT JOIN Table5 K5 ON K5.LANGVALUE = T.LANG5 
LEFT JOIN Table6 K6 ON K6.LANGVALUE = T.LANG6 

WHERE... 

注:這不請自來的問題,但它可能是一個好主意,考慮在職工自願語言存儲在一個單獨的表,在一到許多時尚的模式。這將允許超過6種語言(希望你有很多這樣的...),其員工以及不爲員工攜帶如此多的空事實並非如此通曉多種語言,而且更重要的是它將允許查詢說所有的員工提供一個如果在LANG2或LANG3等中找到該語言,則無需擔心;

注意,Employee-Langage表還可以具有指示「順序」(或流暢程度)的屬性, ,這樣你還可以搜索誰第一家上市的語言的員工爲x。

+0

感謝這有助於... – Nick 2009-10-29 22:33:13

0

我想你可以根據你的表2的格式,我有不同的感覺,你是不是正確歸一表2,這就是爲什麼你在第一個有這個問題,子查詢做到這一點地點。

select EmpId,(Select LANGDESC from [Table 1] t1 where t2.Lang1=LANGVALUE) as LANG1,(and so on) where from [Table 2] t2

+0

MJV是一堆更好的答案。改爲行事。 – Erich 2009-10-28 22:45:04