SQL如何通过另一列解码列

时间:2016-11-03 08:45:42

标签: sql sql-server

我有一个包含3列tab_1seller_nameid_seller的表id_buyer,我希望显示另一个名为buyer_name的列,其对应于{{ 1}}。

卖家也可以是买家,这也是他们拥有相同id_buyer

的原因
id
|  corresponding code |
-----------------------
     abc = 1005
     ddd = 1009
     ccc = 1006
     aaa = 1002
     zzp = 1186
     tyu = 1001

我想要的结果如下所示:

tab_1:

|  seller_name   | id_seller | id_buyer|
-----------------|----------------------
|  abc           | 1005      | 1006    |
|  ddd           | 1009      | 1186    |
|  ccc           | 1006      | 1001    |
|  ccc           | 1006      | 1002    |
|  ddd           | 1009      | 1006    |
|  tyu           | 1001      | 1186    |

5 个答案:

答案 0 :(得分:2)

    create table #a

    ( buyer_name varchar(50), id_buyer int
    )
    insert into #a values
        ('abc',1005),
        ('ddd',1009),
        ('ccc',1006),
        ('aaa',1002),
        ('zzp',1186),
        ('tyu',1001)


        create table #b
        (

          seller_name varchar(50),   id_seller  int, id_buyer int
          )
          insert into #b values

     ('abc',1005,1006),   
     ('ddd',1009,1186),   
     ('ccc',1006,1001),   
     ('ccc',1006,1002),   
     ('ddd',1009,1006),   
     ('tyu',1001,1186) 

     select seller_name,id_seller,buyer_name,a.id_buyer from #a a join 
      #b b on a.id_buyer=b.id_buyer


or 

SELECT 
    seller.seller_name, seller.id_seller, isnull(person.name,seller.seller_name) AS buyer_name, seller.id_buyer 
FROM 
    #b seller 

    LEFT OUTER JOIN (SELECT DISTINCT seller_name AS name, id_seller AS id FROM #b) person ON 
        seller.id_buyer = person.id

答案 1 :(得分:1)

您可以在tab_1上进行自我加入。

SELECT 
    seller.seller_name, seller.id_seller, person.name AS buyer_name, seller.id_buyer 
FROM 
    tab_1 seller 
    -- workout the corresponding code table
    LEFT OUTER JOIN (SELECT DISTINCT seller_name AS name, id_seller AS id FROM tab_1) person ON 
        seller.id_buyer = person.id

答案 2 :(得分:0)

使用Cross apply获取列表。如果您想查看卖家列表中不会出现的买家代码,请使用Outer Apply代替cross apply。我建议您在表中维护相应的代码,因为买方可能不会出现在卖家列表栏中。

 select DISTINCT t1.seller_name,id_seller,id_buyer,a.seller_name
    from 
    #table1 t1 cross apply
    (
    select seller_name from #table1  t2 where  t1.id_buyer=t2.id_seller
    )a

答案 3 :(得分:0)

你应该自己加入table_1。在这里,我使用了左连接,因为您的记录中没有一个买家ID。

select a.seller_name,a.id_seller,a.id_buyer,b.seller_name
from tab_1 a
left join tab_1 b on a.id_buyer=b.id_seller

答案 4 :(得分:0)

您正在寻找的是“自我加入”

以下链接有助于self join