【发布时间】:2014-11-19 16:40:14
【问题描述】:
我正在尝试连接具有不同行数的两个表。客户编号是两个表中的标识字段。
第一个表包括所有客户的客户编号。 所以任何一个都可以被引用)。更复杂的是,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)
【问题讨论】:
-
在询问有关 Sql Server 的问题时不要使用 MySQL 标签。它们是两种截然不同的数据库产品。
-
您的
WHERE子句完全否定了左外连接。如果 TABLE2 中没有对应的行,则 REGION 将为 NULL,即不是IN (1,2,3)。 -
我以为我在示例表中显示了区域值,但如果没有出现,我认为这不是问题所在。在实际的表 2 中,所有行都有一个区域值(没有一个为空),并且在 1、2 和 3 中有很多行。
-
@JoelCoehoorn 我很抱歉。我对 SQL 编程和语言非常非常陌生。我没有意识到这一点。
标签: sql sql-server join case