2017-10-20 6 views
0

にまとめたものメモを追加:合計レコードと私は簡単なテーブルはこの1つのように見えていたSQL

company_Id user_Id price sub_price 
    123456  11111  200  NULL 
    123456  11111  500  NULL 
    456789  22222  300  NULL 

そして、私は、カウント(*)> = 2 1に行を持つレコードを統合します価格を集計するが、列sub_priceで合計されたものを書き留めておく。望ましい出力は次のようになります。

company_Id user_Id price sub_price 
    123456  11111  700  200,500 
    456789  22222  300  300 

希望の出力を達成する方法はありますか?事前にお手数をおかけしていただきありがとうございます

+0

タグあなたの質問を見つけることができます。 –

+0

[tag:rdbms]は何を使用していますか? – Mureinik

+0

申し訳ありませんが、私はMS SQL Server 2008を使用しています – mateskabe

答えて

0

これは、1つの可能な解決策です。単一の行に複数の行を連結に関する 詳細情報は、あなたが使用しているデータベースとhere

DECALRE @tbl AS table (
    company_Id int 
    ,user_Id int 
    ,price int 
    ,sub_price varchar(25) 
) 

INSERT INTO @tbl values (123456, 11111, 200, NULL) 
INSERT INTO @tbl values (123456, 11111, 500, NULL) 
INSERT INTO @tbl values (456789, 22222, 300, NULL) 


SELECT 
    company_Id 
    ,user_Id 
    ,SUM(price) AS price 
    ,STUFF(
     (SELECT ',' + cast(price as varchar) 
     FROM @tbl 
     WHERE company_Id = a.company_id 
      AND user_Id = a.user_Id 
     FOR XML PATH(''),TYPE).value('.','NVARCHAR(MAX)'),1,1,'') AS sub_price 
FROM @tbl a 
GROUP BY company_Id, user_Id 
+0

ありがとうございます!私はあなたのアプローチが好きです! – mateskabe

1

あなたは文字列にグループの要素をオンにするlistaggを使用することができます。

SELECT ... 
    , LISTAGG(price, ',') WITHIN GROUP (ORDER BY price) sub_price 
    FROM ... 

listaggはSQL標準ですが、それはnot yet supported by all databasesです。しかし、ほとんどのデータベースは類似の機能を別の名前で提供しています(例: PostgreSQLとSQL Sever(01203以降)のstring_aggまたはMySQLのgroup_concatです。

詳細情報:http://modern-sql.com/feature/listagglistaggがサポートされていない場合も、選択肢を示す)

関連する問題