-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     

そして、以下の出力結果を表示する必要があります。

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

すべての製品 ID と技術 ID には 1 つのレコードがあり、すべてのバイヤーをフォーマットの列に結合し、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

わかりました。これは良い質問です。私が今まで見た中で最高の答えはhereです。ニーズに合わせてオプションを使用することをお勧めします。次の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 に答える