0

4列のテーブルがあります:

| PromoId | Amount| PromoType  |Description|
--------------------------------------------------
|   101   |   11  |      a     |     free|       
|   101   |   12  |      a     |     20% |       
|   103   |   17  |      c     |     45% |       
|   104   |   14  |      c     |     50% |   

PromoId と PromoType の同じ値の説明を組み合わせる必要があります。

前述の表の場合、出力は次のようになります。

| PromoId | Amount| PromoType  |Description|
--------------------------------------------------
|   101   |   11  |      a     |     free 20% |       
|   101   |   12  |      a     |     free 20% |       
|   103   |   17  |      c     |     45%      |       
|   104   |   14  |      c     |     50%      |   

SQL Server を使用しています。前もって感謝します。

4

3 に答える 3

1

ここに私の解決策があります

select d.PromoId, d.Amount, d.PromoType, Left(x.Description,Len(x.Description)-1)
from demo d
join (
    select distinct x1.PromoId, 
    (select x2.Description + ',' from demo x2 where x2.PromoId = x1.PromoId For XML PATH ('')) Description
    from demo x1) x on d.PromoId = x.PromoId

謝辞

于 2013-01-15T14:24:11.400 に答える
1
WITH ConcatValue
AS
(
  SELECT
       PromoId,
       STUFF(
           (SELECT ' ' + Description
            FROM TableName
            WHERE PromoId = a.PromoId
            FOR XML PATH (''))
            , 1, 1, '')  AS Title
  FROM TableName AS a
  GROUP BY PromoId
)
SELECT   a.PromoId, a.Amount, a.PromoType,
         b.Title
FROM     tableName a
         INNER JOIN ConcatValue b
            ON a.PromoId = b.PromoId
于 2013-01-15T14:20:50.333 に答える
0

SQL Server では少し面倒な文字列連結が必要です。1 つの方法を次に示します。

select t.*,
       (select t2.description+' '
        from t t2
        where t2.promoID = t.promoID and t2.promoType = t.promotType
        order by t2.amount
        for xml path ('')
       ) as CombinedDescription
from t

これにより、最後にスペースが残りますが、これは切り取ることができます。

于 2013-01-15T14:12:40.047 に答える