2014-01-06 135 views
2

可能是我的問題有點奇怪。通常情況下,我們使用匹配或不匹配的列值條件連接兩個表。但是,在這裏我需要所有匹配的值(如果可用)以及「其他」的常見值(如果值不匹配)。SQL連接邏輯取可匹配的值和不匹配值的公用值

我有兩個表如下。一個是'員工'表。另一個是'增量' 表。如果在增量表中找到員工表的「部門」和「等級」,我將採用該值的增量。 但是如果'Dept'可用並且'Rank'在Increment表中不可用,那麼我將採用'Dept'的值和'other'指定的等級。如果在增量表中它們都不可用,則它們應該採用由'other'指定的值。
它們包含如下的數據。

EmployeeId. Name Dept. Rank Salary 
     1  Jack Sales 1 1000 
     2  Robi Sales 2 1200 
     3  Martin Sales 3 1700 
     4  Chris HR  1 1000 
     5  Angel HR  2 1400 
     6  Luke Acc 1 1300 

    Dept. Rank Increment 
    Sales 1  50 
    Sales Other 70 
    HR  1  60 
    HR  Other 75 
    Other Other 65 

我希望有類似以下的輸出:

EmployeeId. Name Dept. Rank Salary Increment 
     1  Jack Sales 1 1000 50 
     2  Robi Sales 2 1200 70 
     3  Martin Sales 3 1700 70 
     4  Chris HR  1 1000 60 
     5  Angel HR  2 1400 75 
     6  Luke Acc 1 1300 65 

回答

2

嘗試這種方式

SELECT e.employeeid, e.name, e.dept, e.rank, e.salary, 
     COALESCE(i.increment, o.increment, oo.increment) increment 
    FROM employee e JOIN increment oo 
    ON oo.dept = 'Other' 
    AND oo.rank = 'Other' LEFT JOIN increment i 
    ON e.dept = i.dept 
    AND e.rank = i.rank 
    AND i.rank <> 'Other' LEFT JOIN increment o 
    ON e.dept = o.dept 
    AND o.rank = 'Other' 

輸出:

 
| EMPLOYEEID | NAME | DEPT | RANK | SALARY | INCREMENT | 
|------------|--------|-------|------|--------|-----------| 
|   1 | Jack | Sales | 1 | 1000 |  50 | 
|   2 | Robi | Sales | 2 | 1200 |  70 | 
|   3 | Martin | Sales | 3 | 1700 |  70 | 
|   4 | Chris | HR | 1 | 1000 |  60 | 
|   5 | Angel | HR | 2 | 1400 |  75 | 
|   6 | Luke | Acc | 1 | 1300 |  65 | 

這裏是SQLFiddle演示

+0

謝謝。這工作! –