将多行数据合并到同一列中

时间:2017-05-04 14:32:17

标签: sql sql-server for-xml-path

我想创建一个作业ID表和一个列,列出所有匹配的不同作业类别,但是连接到同一列。例如,现在作业82041有两个类别,但现在返回两行。我想在一个领域内说“零售,销售助理”。

我尝试的代码如下,任何人都可以告诉我我做错了什么?

实施例

jobOrderID  (No column name)

82027    Motion Graphics               
82029    Other                         
82030    Product Designer              
82041    Retail                        
82041    Sales Associate               
82069    Social Media      

示例代码:

select  JobOrder.jobOrderID ,    
        stuff((select distinct ', ' + cast(Category.occupation as nchar(30)) 
               from Category 
                where Category.categoryID = JobOrderCategories.categoryID
        for xml path ('')),1,1,'')    

from JobOrder 
left outer join JobOrderCategories 
     on JobOrder.joborderid = JobOrderCategories.jobOrderID
left outer join Category 
     on Category.categoryID = JobOrderCategories.categoryID

where JobOrder.dateAdded > '2017-5-2' and JobOrder.dateAdded < '2017-5-3'
  and joborder.isDeleted = 0

order by joborder.dateAdded asc

1 个答案:

答案 0 :(得分:0)

通过改变左连接

来计算出来
select

JobOrder.jobOrderID,

stuff((select distinct ', ' + cast(Category.occupation as varchar(30)) 
from Category 
left outer join JobOrderCategories on (Category.categoryID = JobOrderCategories.categoryID and joborder.jobOrderID = JobOrderCategories.joborderid)
where Category.categoryID = JobOrderCategories.categoryID
for xml path ('')),1,1,'')


from JobOrder 

where JobOrder.dateAdded > '2017-5-2' and JobOrder.dateAdded < '2017-5-3'
and joborder.isDeleted = 0