将结果合并到一列

时间:2014-06-13 14:22:08

标签: sql sql-server

我有以下查询:

SELECT  a.User1 as Employee
        , isnull(sum(distinct b.Page_Count),0) AS Yesterday
        , isnull(sum(distinct c.Page_Count),0) AS Today
        , isnull(sum(distinct d.Page_Count),0) AS Week
        , e.Material_Location as '(Yesterday)'
        , f.Material_Location as '(Today)'
From    TaskUser AS a
    LEFT JOIN PaperMaterial AS b
    ON b.Assigned_To = a.User1
    AND b.Date_Assigned between ('06/09/2014') AND ('06/13/2014')
    LEFT JOIN PaperMaterial AS c
    ON c.Assigned_To = a.User1
    AND c.Date_Assigned between ('06/13/2014') AND ('06/14/2014')
    LEFT JOIN PaperMaterial AS d
    ON d.Assigned_To = a.User1
    AND d.Date_Assigned between ('06/09/2014') AND ('06/14/2014')
    LEFT JOIN PaperMaterial AS e
    ON e.Assigned_To = a.User1
    AND e.Date_Assigned between ('06/12/2014') AND ('06/13/2014')
    LEFT JOIN PaperMaterial AS f
    ON f.Assigned_To = a.User1
    AND f.Date_Assigned between ('06/13/2014') AND ('06/14/2014')
GROUP BY a.User1, e.Material_Location, f.Material_Location
Order By a.User1, e.Material_Location, f.Material_Location

如果在同一天为同一用户输入了多条记录,我将获得同一个人的唯一行。我只希望每个用户有一行,e和f结果合并到同一列。

即:电流输出=

Amy   0   640   640   NoTask   Task  
Amy   0   640   640   Task2    Task  
Amy   0   640   640   Task3    Task4  
Amy   0   640   640   Task1    NoTask   

请求的输出:

Amy   0   640   640   (NoTask, Task1, Task2, Task3) (NoTask, Task, Task4)

1 个答案:

答案 0 :(得分:1)

这是一个使用stuffcorrelated subquery结合使用的极为简单的示例: SQL Fiddle

我将你的输出用作表格,或多或少:

select
name,
 stuff(
    (
    select cast(',' as varchar(max)) + mt.one
    from MyTable mt
      WHERE mt.name = t1.name
    order by mt.name
    for xml path('')
    ), 1, 1, '') 
from mytable t1
group by name

我们正在使用内容来为每个ONE创建名为NAME的列连接每个值。相关子查询允许我们将来自其中的每一行与主查询中出现的相应行相关联。

相关问题