我需要将三个表格内连接以形成第三个表格。
第一个表(Basic)如下所示:
+----------+----------+---------+------------+
| 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。
Basic
和Detail
之间的联接应具有以下条件:
加入相同的订单号,并获取Order Ext = 'Prime'
的ID,如果Prime不作为扩展名存在,那么Order Ext = '-'
如果不存在,则接受其余的任何一个(在此处无关紧要)这点)。
在此之后,应该获取ID并从Color
表中获取正确的行。
我正在考虑Row Over,但这是非常耗费资源的,所以我在考虑是否有更有效的方法来做到这一点?
答案 0 :(得分:0)
我会在详细信息中添加一个列,您可以在其中为此行提供优先级。 然后你可以使用这个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