-1

合并多个表后,我在我的数据库中创建了以下视图。Aselect * from MYViEW给出以下结果。

ProductID | TechID | ContactID | Priority | FIRSTNAME | MIDDLEINI | LASTNAME | 
1123         2406       1371        1        Pradeep       X          Nayak      
1123         2406       1368        2        Hello         W          World      
1123         2406       1363        3        Foo           Y          World    
1299         2279       1208        2        Some          Z          Dude     

我需要在下面显示 OUTPUT 结果:

ProductID | TechID | ContactID | Priority | FIRSTNAME | MIDDLEINI | LASTNAME | Buyers                                        |
1123         2406       1371        1        Pradeep    X           Nayak      Nayak, Pradeep X; World, Hello W; World, Foo Y  
1299       2279         1208        2        Some       Z           Dude       Dude, Some Z

对于每个 Product ID 和 Tech ID 都有一个记录,并且所有买家必须以格式组合在一个列中LastName, FirstName MiddleIni,每个名称以空格分隔。我已经尝试使用此处的自定义聚合函数将结果组合到单个列中。如果您可以帮助我查询此问题,请告诉我。

4

3 回答 3

3

这将以您想要的方式显示数据:

select t1.ProductID,
  TechId,
  x.ContactID,
  x.Priority,
  FirstName,
  MiddleIni,
  LastName,
  stuff((select  '; ' + lastname + ', ' + FIRSTNAME + ' ' + MIDDLEINI
          from yourtable t2
          where t2.productid = t1.productid
        FOR XML PATH('')), 1, 1, '') 
from yourtable t1
inner join
(
  select min(priority) priority, ProductID, max(ContactID) ContactID
  from yourtable
  group by ProductID
) x
  on t1.ProductID = x.ProductID
  and t1.contactid = x.contactid

SQL Fiddle with Demo

这是获取MIN()优先级值 - 最高 - 然后是MAX()contactId

于 2012-09-21T18:03:18.080 回答
1

好的,这是一个很好的问题,我见过的最好的答案就在这里。我将建议您根据XML PATH需要使用该选项,它看起来像这样:

SELECT v.ProductID, v.TechID, v.ContactID, MIN(v.Priority) AS Priority,
    STUFF ( ( SELECT '; ' + bv.LastName + ', ' bv.FirstName + ' ' + bv.MiddleIni
              FROM [MYVIEW] bv
              WHERE bv.ProductID = v.ProductID AND
                    bv.TechID = v.TechID AND
                    bv.ContactID = v.ContactID
              ORDER BY bv.LastName, bv.FirstName, bv.MiddleIni
              FOR XML PATH(''), TYPE).value('.', 'varchar(max)'), 1, 1, '') AS Buyers
FROM [MYVIEW] v
GROUP BY v.ProductID, v.TechID, v.ContactID
于 2012-09-21T18:03:00.610 回答
-3

这样的东西会提供您正在寻找的输出吗?

SELECT LASTNAME + ', ' + FIRSTNAME + ' ' + MIDDLEINI
, ProductID
, TechID
, ContactID
. Priority
FROM MYVIEW
GROUP BY LASTNAME + ', ' + FIRSTNAME + ' ' + MIDDLEINI
, ProductID
, TechID
, ContactID
. Priority
于 2012-09-21T17:39:01.200 回答