SQL Join两个具有不同行数的表从一个表中获取所有行

时间:2014-11-19 16:40:14

标签: sql sql-server join case

我正在尝试连接两个具有不同行数的表。客户编号是两个表中的标识字段。

第一个表包含所有客户的客户编号。 所以要么被引用)。为了使事情进一步复杂化,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)

2 个答案:

答案 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   |
+------+