我正在尝试连接两个具有不同行数的表。客户编号是两个表中的标识字段。
第一个表包含所有客户的客户编号。 所以要么被引用)。为了使事情进一步复杂化,ClientNumber2字段是一个文本字段,但我需要它是一个类似于其他客户端编号字段的数字。第二个表中还有一个区域字段,我需要限制到某些区域编号。 第二个表仅包含符合特定规范的客户的客户编号。第二个表中的某些客户端具有第二个客户端编号。
我想创建一个新列,显示第二个表中不存在的所有客户端的第一个表中的客户端编号,如果存在则显示第二个表中的第二个客户端编号,否则,显示来自的客户端编号第一个表(与第二个表的第一列中的客户编号相同
我已经包含了我正在使用的语法。它运行没有错误。 OriginalCN字段为表2的ClientNumber2中具有值的那些返回所需的值,但是为所有其他值返回空值。我无法弄清楚如何让它正常工作。我还包括样本表和我想要的表。非常感谢任何帮助!
CLIENT TABLE 1
CLIENT NUMBER
1
2
3
4
5
6
7
8
CLIENT TABLE 2
CLIENT NUMBER 2ND CLIENT NUMBER REGION
2 14 1
6 2
8 15 2
DESIRED RESULT
1
14
3
4
5
6
7
15
以下是我使用的语法:
SELECT
TABLE2.CLIENTNUMBER
TABLE1.CLIENTNUMBER
CASE
WHEN TABLE2.CLIENTNUMBER IS NULL THEN TABLE1.CLIENTNUMBER
WHEN TABLE2.CLIENTNUMBER2 IS NULL THEN TABLE2.CLIENTNUMBER
WHEN TABLE2.CLIENTNUMBER2 = ' ' THEN TABLE2.CLIENTNUMBER
ELSE
CAST(TABLE2.CLIENTNUMBER2 AS INT)
END AS OriginalCN
FROM DSS.DBO.TABLE1
LEFT OUTER JOIN
RPTO.DBO.TABLE2
ON
DSS.DBO.TABLE1.CLIENTNUMBER = RPTO.DBO.TABLE2.CLIENTNUMBER
WHERE TABLE2.REGION IN (1,2,3)
答案 0 :(得分:0)
试试这个:
SELECT COALESCE(CAST(NULLIF(t2.ClientNumber2,' ') As Int), t1.ClientNumber) As ClientNumber
FROM DSS.DBO.TABLE1 t1
LEFT JOIN RPTO.DBO.TABLE2 t2 ON t1.CLIENTNUMBER = t2.CLIENTNUMBER
WHERE COALESCE(t2.REGION, 1) IN (1,2,3)
答案 1 :(得分:0)
试试这个..
CREATE TABLE #CLIENT_TABLE_1
(CLIENTNUMBER INT)
INSERT #CLIENT_TABLE_1
VALUES (1),(2),(3),(4),(5),(6),(7),(8)
CREATE TABLE #CLIENT_TABLE_2
(CLIENTNUMBER INT,scNDCLIENTNUMBER varchar(10),REGION INT)
INSERT #CLIENT_TABLE_2
VALUES( 2,'14',1),(6,' ',2),(8,'15',2)
SELECT CASE
WHEN b.CLIENTNUMBER IS NOT NULL
AND len(b.scNDCLIENTNUMBER)>0 THEN b.scNDCLIENTNUMBER
ELSE a.CLIENTNUMBER
END Result
FROM #CLIENT_TABLE_1 a
LEFT JOIN #CLIENT_TABLE_2 b
ON a.CLIENTNUMBER = b.CLIENTNUMBER
输出
+------+
|Result|
+------+
| 1 |
| 14 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 15 |
+------+