2017-10-20 45 views
0

J'ai une table simple ressemble à celui-ci:records Somme et ajouter une note ce qui a été résumé dans sql

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

Et je veux consolider les dossiers qui a COUNT (*)> = 2 en une seule ligne par résumant le prix mais avec note ce qui a été résumé dans la colonne sub_price. La sortie désirée devrait ressembler à celle-ci:

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

Y a-t-il une approche simple pour obtenir la sortie désirée? Merci beaucoup pour votre aide à l'avance.

+0

Tag votre question avec la base de données que vous utilisez. –

+0

Qu'est-ce que [tag: rdbms] utilisez-vous? – Mureinik

+0

Désolé, j'utilise MS SQL Server 2008 – mateskabe

Répondre

0

Ceci est une solution possible; En savoir plus sur concaténer plusieurs lignes en ligne simple, vous pouvez trouver 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

Merci beaucoup !! J'aime ton approche! – mateskabe

1

Vous pouvez utiliser listagg pour transformer les éléments d'un groupe dans une chaîne:

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

Bien que listagg est standard SQL, il est not yet supported by all databases. Cependant, la plupart des bases de données offrent des fonctionnalités similaires sous un nom différent, par exemple. string_agg dans PostgreSQL et SQL Server (depuis 2017) ou group_concat dans MySQL.

Plus d'infos: http://modern-sql.com/feature/listagg (montrant également des solutions de rechange si listagg ne sont pas pris en charge)