使用CASE语句的内部联接在SQL SERVER中不起作用

时间:2016-02-09 06:06:27

标签: sql sql-server tsql

我有两个tables帐户代码如下,

table 1:

account  

50000
50006
50015
50105
50150
50155
50165

table 2:

Account

50000
50010
50140
50105
50150
50155
50165

我需要加入这两个tables。如果table-1的任何帐户代码与table-2不匹配,那么我已隐式将table-1帐户代码更改为table-2帐户代码。

我做了如下的事情,

 SELECT T1.Account, T2.Account
 FROM table1 t1 
 INNER JOIN table2 t2
 on (t2.account =  CASE t1 .account 
                   WHEN 50015 THEN 50010
                   WHEN 50006 THEN 50140
                   ELSE  t1 .account 
                    END )

但我只得到匹配的代码作为输出,

account Account
50000   50000
50105   50105
50150   50150
50155   50155
50165   50165

我没有获得不匹配的帐户代码,即(50006 and 50015)。任何人都可以帮我找出这里的错误吗?

我的预期输出是

account Account
50000   50000
50006   50140
50015   50010
50105   50105
50150   50150
50155   50155
50165   50165

感谢您的帮助

4 个答案:

答案 0 :(得分:2)

试试这个

SQL Fiddle

SELECT T1.Account, T2.Account
 FROM table1 t1 
 INNER JOIN table2 t2
 on (t1.account =  CASE t1 .account 
                   WHEN 50015 THEN t2 .account+5
                   WHEN 50006 THEN t2 .account-134
                   ELSE  t2 .account 
                    END )

答案 1 :(得分:2)

使用CASE然后DISTINCT数据,这将为您提供通用解决方案

-- table1
declare  @table1 table
(account  bigint)

insert into @table1 values (50000)
insert into @table1 values (50006)
insert into @table1 values (50015)
insert into @table1 values (50105)
insert into @table1 values (50150)
insert into @table1 values (50155)
insert into @table1 values (50165)

-- table2
declare  @table2 table
(account  bigint)

insert into @table2 values (50000)
insert into @table2 values (50010)
insert into @table2 values (50140)
insert into @table2 values (50105)
insert into @table2 values (50150)
insert into @table2 values (50155)
insert into @table2 values (50165)


-- QUERY
select distinct t1.account as Account1, 
Account2 = case 
    when  t1.account = t2.account then t2.account else  t1.account
    end
from @table1 t1, @table2 t2

RESULT

Account1    Account2
50000       50000
50006       50006
50015       50015
50105       50105
50150       50150
50155       50155
50165       50165
评论后

编辑 - 这是我们要求的一部分。我需要在50140中更新与50006帐户代码相对应的金额,依此类推......

select distinct t1.account as Account1, 
Account2 = case 
    when  t1.account = 50006 then 50140
    when  t1.account = 50015 then 50010 
    else  t1.account end
from @table1 t1 , @table2 t2

RESULT

Account1    Account2
50000       50000
50006       50140
50015       50010
50105       50105
50150       50150
50155       50155
50165       50165

答案 2 :(得分:1)

你可以试试这个

   SELECT T1.Account, T2.Account
   FROM table1 t1 
   INNER JOIN table2 t2
   on (t2.account =  CASE 
               WHEN t1.account = 50015 THEN 50010
               WHEN t1.account=50006 THEN 50140
               ELSE  t1.account 
                END )

答案 3 :(得分:1)

SELECT T1.Account, T2.Account,(CASE t1 .account 
                   WHEN 50015 THEN 50010
                   WHEN 50006 THEN 50140
                   ELSE  t1 .account 
                    END) as New_Account
 FROM table1 t1 
INNER JOIN table2 t2
 on (t2.account =  t1.account )