【发布时间】:2012-04-17 15:40:08
【问题描述】:
我正在尝试将两个表连接在一起,但有一个奇怪的要求。
通常我会加入该客户的记录和代码匹配的位置
SELECT *
FROM DataTable d
JOIN LookupTable l
ON d.LookupCode = l.LookupCode
AND d.Customer = l.Customer
但是,我需要做的是加入查找表中的三行。匹配的 ID,以及基于另一列 (Order) 中的排序顺序的前后行(如果存在)。然后我需要对结果进行排序,首先匹配的记录,然后是之前的查找记录,然后是匹配记录之后的查找记录。
对实现此目的的最佳方法有什么想法吗?
例子:
Lookup:
Customer Code Order
12345 A 1
12345 B 2
12345 C 3
12345 D 4
12345 E 5
22222 A 1
22222 B 2
22222 D 4
22222 E 5
Data:
Customer Code
12345 B
12345 D
22222 B
22222 D
Result I need
Customer Code
12345 B
12345 A
12345 C
12345 D
12345 C
12345 E
22222 B
22222 A
22222 D
22222 D
22222 B
22222 E
【问题讨论】:
-
您能举个例子说明一下吗?另外,哪个 RDBMS
-
什么 RDBMS,请问?这在那些具有 OLAP 功能的实现中更容易......您能否列出您希望匹配的 actual 列?事实上,尚不清楚
ID来自何处,以及Order列(旁注 - 不建议在 SQL 中的“保留”单词之后命名表/列)。 -
Sql Server,我加了一个例子
-
你确定你需要的结果是正确的吗?我认为客户 22222 应该去
BACDCE -
@Paddy,不,因为客户 22222 在查找表中没有 C 记录
标签: sql sql-server join