0 votes

Comment agréger des données dans une vue avec le même ID ?

J'ai une vue existante qui renvoie des données dans le format suivant, basé sur l'agrégation des noms d'options qui ont le même product_id. Le nom de la vue est "vProdOptions".

option_name           product_id

XSMALL (2-6)          17854
SMALL (6-10)          17854
MEDIUM (10-14)      17854
LARGE                 18232

Comment puis-je retourner ces données dans une vue agrégée formatée de la sorte ?

  OPTIONS_AVAIL                                           Product_ID

  XSMALL (2-6), SMALL (6-10), MEDIUM (10-14)              127182

  SMALL (6-10), MEDIUM (10-14)                            166382

J'utilise MS SQL 2k5.

Je crée ici une nouvelle question basée sur les commentaires de ces deux questions. Je me suis rendu compte que j'avais plutôt besoin d'une vue.

http://stackoverflow.com/questions/2233740/aggregate-data-from-view-as-udf-to-use-in-select-statement

http://stackoverflow.com/questions/2239375/error-with-sql-function-creation

1voto

HLGEM Points 54641

Le pivotement n'est pas une méthode très efficace en SQL. Personnellement, je laisserais votre vue tranquille et je ferais pivoter les données dans l'application.

1voto

Andomar Points 115404

Vous pourriez sélectionner les produits distincts, et cross apply sur une fonction qui calcule une chaîne d'options :

select *
from (select distinct product_id from @t) a
cross apply (
    select option_name + ', ' as [text()]
    from @t b
    where a.product_id = b.product_id
    for xml path('')
) c ( Options )

-->

product_id   Options
17854        XSMALL (2-6), SMALL (6-10), MEDIUM (10-14), 
18232        LARGE, 

Code pour créer un exemple :

declare @t table (option_name varchar(30), product_id int)

insert @t select 'XSMALL (2-6)', 17854
union all select 'SMALL (6-10)', 17854
union all select 'MEDIUM (10-14)', 17854
union all select 'LARGE', 18232

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X