【问题标题】:Joining a table inside a split statement SQL在拆分语句 SQL 中加入表
【发布时间】:2015-09-18 19:18:40
【问题描述】:

将逗号分隔的字符串拆分为列后,我想将结果与另一个表中的其他两列合并。

     SELECT A.ID,  
 Split.a.value('.', 'VARCHAR(100)') AS SUPPLIER_SPECIALTY 
 FROM  
 (
     SELECT ID,
         CAST ('<M>' + REPLACE(SUPPLIER_SPECIALTY, ',', '</M><M>') + '</M>' AS XML) AS SUPPLIER_SPECIALTY  
     FROM  JOA_COMPANY_DEMO A 
     WHERE SUPPLIER_SPECIALTY != '' 

 ) AS A CROSS APPLY SUPPLIER_SPECIALTY.nodes ('/M') AS Split(a)

这是我加入表格的代码

 Select B.Code, B.Description FROM vBo B
 INNER JOIN JOA_COMPANY_DEMO A
 ON A.SUPPLIER_SPECIALTY=B.Code 
 WHERE B.TableName = 'SUPPLIER_SPECIALTY'

这就是我所拥有的

ID      SUPPLIER_SPECIALTY
0520xxx 0001
0520xxx 0002
0520xxx 0003

这就是我试图与匹配代码的供应商获得的结果

   ID      SUPPLIER_SPECIALTY  Code Description
    0520xxx 00016              00016    Clocks
    0520xxx 00016              00016    Clocks
    0520xxx 00003              00003    soose      

【问题讨论】:

    标签: sql sql-server-2008 delimiter


    【解决方案1】:

    你使用派生表:

     Select B.Code, B.Description 
     FROM vBo B
     INNER JOIN (
             SELECT A.ID,  
             Split.a.value('.', 'VARCHAR(100)') AS SUPPLIER_SPECIALTY 
             FROM  
             (
                 SELECT ID,
                     CAST ('<M>' + REPLACE(SUPPLIER_SPECIALTY, ',', '</M><M>') + '</M>' AS XML) AS SUPPLIER_SPECIALTY  
                 FROM  JOA_COMPANY_DEMO A 
                 WHERE SUPPLIER_SPECIALTY != '' 
    
             ) AS A CROSS APPLY SUPPLIER_SPECIALTY.nodes ('/M') AS Split(a)
     ) A
     ON A.SUPPLIER_SPECIALTY=B.Code 
     WHERE B.TableName = 'SUPPLIER_SPECIALTY'
    

    【讨论】:

    • 非常感谢您的回复,但我仍然只得到两列而不是所需的 4. 代码和描述,而 id 喜欢获取 ID 供应商代码描述
    • 然后添加那些字段,我不知道它们来自哪个表。
    猜你喜欢
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 2018-08-18
    相关资源
    最近更新 更多