Koo*_*eng 5 sql t-sql sql-server
我的客户表中有一些特殊的行以这种方式工作。有多个客户记录属于同一客户,但列值略有不同。这些表属于它们,我无法更改其表中的任何内容,因此我必须处理脚本来处理此问题。
现在,我需要比较主表中的客户数据并从客户表中获取数据。条件如下:
如果客户端表中存在主表ID,则获取与主表ID列匹配的唯一记录
如果客户端表中不存在主表ID,请使用主表IDnumber查找并匹配客户端表中的IDnumber。
以下是我要实现的示例:
假设此数据存在于下面的主表和客户表中:
在上述情况下,我的脚本应始终仅选择客户端表PKId 1,并通过匹配主表ID列和客户端表ClientId列来忽略客户端表中的行PKId 2。
对于下面的另一种情况:
由于行PKId 1的客户ID为空,并且无法与客户表中的客户ID 10相匹配,因此我的脚本应使用主表Idnumber来查找并匹配客户表中的记录,并通过Idnumber列获取行PKId 2 。
我想在连接条件下做一个案例,但不确定如何构造它。我正在考虑以下内容(不是实际的SQL语句,只是一些想法):
Select
c.Id, c.Name, c.AuthorizeToken
From
Client c
Left Join
Main m on (If m.Id = c.ClientId has data return, get AuthorizeToken from that row only;
else if m.Id = c.ClientId has no data return, use m.Idnumber = c.Idnumber
to find and get AuthorizeToken)
Run Code Online (Sandbox Code Playgroud)
赞赏是否可以为我提供任何其他建议以实现这一目标。
您也可以改用LEFT JOIN
SELECT m.id, ISNULL(c.authorize_token, c1.authorize_token) authorize_token
FROM main m
LEFT JOIN client c ON m.id = c.client_id
LEFT JOIN client c1 ON m.idnumber = c1.idnumber
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6779 次 |
| 最近记录: |