2014-09-25 22 views
0

我有三個表格需要內聯以形成第三個表格。SQL根據分層標準進行連接

第一個表(基本)看起來是這樣的:

+----------+----------+---------+------------+ 
| Order No | Supplier | Product | Date | 
+----------+----------+---------+------------+ 
|  100 | SuppCo | Shirt | 25.09.2014 | 
|  101 | SuppCo | Pants | 25.09.2014 | 
|  102 | SuppCo | Shirt | 25.09.2014 | 
+----------+----------+---------+------------+ 

第二個表(色彩)看起來是這樣的:

+------+--------+ 
| ID | Color | 
+------+--------+ 
| 1ABC | yellow | 
| 1ABD | red | 
| 1ABE | pink | 
| 1ABF | orange | 
| 1ABG | teal | 
| 2DEG | green | 
| 3HIK | blue | 
+------+--------+ 

第三個表(詳細信息)是這樣的:

+------+----------+-----------+ 
| ID | Order No | Order Ext | 
+------+----------+-----------+ 
| 1ABC |  100 | -   | 
| 1ABD |  100 | Prime  | 
| 1ABE |  100 | Basic1 | 
| 1ABF |  100 | Basic2 | 
| 1ABG |  100 | Basic3 | 
+------+----------+-----------+ 

決賽桌應該是這樣的:

+----------+------+-------+------------+ 
| Order No | ID | Color | Date | 
+----------+------+-------+------------+ 
|  100 | 1ABD | red | 25.09.2014 | 
|  101 | 2DEG | green | 25.09.2014 | 
|  102 | 3HIK | blue | 25.09.2014 | 
+----------+------+-------+------------+ 

該表基於Basic表,其中使用了訂單號和日期。 從訂單號碼中,我想從Detail表中獲取ID。 BasicDetail之間

的加入應具備以下條件: 加入相同的順序號,並獲得ID其中Order Ext = 'Prime',如果總理不作爲擴展名,然後Order Ext = '-'存在,如果不存在,然後採取任何其餘的(這點無關緊要)。 在此之後,應該採取ID並從Color表獲得正確的行。

我在考慮Row Over,但這是相當資源枯竭的問題,所以我在考慮是否有更高效的方法來做到這一點?

回答

0

我會在詳細信息中添加一列,您可以在此處給出具有此ID的行的優先級。 然後你可以使用這個SELECT:

SELECT B.Order_No, C.ID, C.Color, B.Date 
FROM [Basic] B 
INNER JOIN Detail D ON B.Order_No = D.Order_No 
    AND D.ID = (SELECT TOP 1 D1.ID 
       FROM Detail D1 
       WHERE D1.Order_No = B.Order_No 
       ORDER BY D1.OrderPriority ASC) 
INNER JOIN Color C ON C.ID = D.ID