2017-10-20 101 views
0

總結起來,我有一個簡單的表看起來像這樣的:總和的記錄,並添加筆記內容是在SQL

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

我想鞏固其具有COUNT(*)> = 2的記錄成一排總結價格,但要注意列sub_price中總結的內容。期望的輸出應該看起來像這樣:

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

是否有任何簡單的方法來實現所需的輸出?非常感謝您的幫助。

+0

標籤您與您正在使用的數據庫的問題。 –

+0

你使用了什麼[標籤:rdbms]? – Mureinik

+0

對不起,我使用MS SQL Server 2008 – mateskabe

回答

0

這是一種可能的解決方案;:

更多信息 有關串聯多列數分爲單列更多信息,你可以找到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。但是,大多數數據庫都以不同的名稱提供類似的功能 - 例如。 string_agg在MySQL中的PostgreSQL和SQL Sever(自2017年以來)或group_concat。 (不支持如果listagg還示出的替代品)http://modern-sql.com/feature/listagg