2016-09-29 51 views
0

我现在有一个类似的查询到这一个..SQL多个结果不同的值

select i.App_Id      as ApplicationId, 
     Cast(i.ObjectId as NVARCHAR(50)) as ObjectId, 
     1     as ActivityId, 
     Cast(case 
       when oh.ObjectId is null then 0 
       else 1 
       end as BIT)    as Highlight, 
     iu.UserId      as UserId 
    from table0 i 
     inner join table1 iu 
       on i.IdeaID = iu.IdeaID 
     left join table2 oh 
       on oh.ObjectId = i.IdeaID 
     left join table3 mIS 
       on i.IdeaID = mIS.IdeaID 
        AND mIS.EndTime is null 
     inner join table4 mISF 
       on mISF.StateFluxId = mIS.StateFluxId 
    where (iu.RelationId = 1 or iu.RelationId = 2) 

这是返回,例如:

2 | 1 | 1 | 1 | 1 
2 | 1 | 1 | 1 | 2 
2 | 1 | 1 | 1 | 3 

我m试图改变它以合并第五列的结果,当其他列值相同时:

2 | 1 | 1 | 1 | 1,2,3 

这是pos锡布尔赫丁?没有设法使用Stuff功能来完成它。

谢谢!

回答

0

基于您的代码我已经加入了XML PATH()。请做根据您的要求

select i.App_Id      as ApplicationId, 
      Cast(i.ObjectId as NVARCHAR(50)) as ObjectId, 
      1     as ActivityId, 
      Cast(case 
        when oh.ObjectId is null then 0 
        else 1 
        end as BIT)    as Highlight, 
       stuff(
     (
     SELECT ',' + CAST(IU.USERID AS VARCHAR(10)) 
        FROM table1 t2 WHERE iu.IdeaID = t2.IdeaID 
            FOR XML PATH('') 
    ) 
               ,1,1,'') AS USERID 
     from table0 i 
      inner join table1 iu 
        on i.IdeaID = iu.IdeaID 
      left join table2 oh 
        on oh.ObjectId = i.IdeaID 
      left join table3 mIS 
        on i.IdeaID = mIS.IdeaID 
         AND mIS.EndTime is null 
      inner join table4 mISF 
        on mISF.StateFluxId = mIS.StateFluxId 
     where (iu.RelationId = 1 or iu.RelationId = 2) 
     GROUP BY i.App_Id 
       ,i.ObjectId, 
       oh.ObjectId 
+0

什么是T1必要的改变? iu我猜 – Serg

+0

很抱歉编辑它的别名@Serg – mohan111

0

你试过这样的,

SELECT DISTINCT i.App_Id AS ApplicationId 
    ,Cast(i.ObjectId AS NVARCHAR(50)) AS ObjectId 
    ,1 AS ActivityId 
    ,Cast(CASE 
      WHEN oh.ObjectId IS NULL 
       THEN 0 
      ELSE 1 
      END AS BIT) AS Highlight 
    , 
    --iu.UserId      as UserId 
    (stuff(SELECT ',' + userid FROM table1 WHERE Ideaid = iu.IdeaId FOR XML path(''), 1, 1, '')) AS UserId 
FROM table0 i 
INNER JOIN table1 iu ON i.IdeaID = iu.IdeaID 
LEFT JOIN table2 oh ON oh.ObjectId = i.IdeaID 
LEFT JOIN table3 mIS ON i.IdeaID = mIS.IdeaID 
    AND mIS.EndTime IS NULL 
INNER JOIN table4 mISF ON mISF.StateFluxId = mIS.StateFluxId 
WHERE (
     iu.RelationId = 1 
     OR iu.RelationId = 2 
     )