2011-03-15 3 views
0

Prémisse: Nous avons une table avec 5 champs. 2 champs sont toujours uniques.Requête SQL (peut inclure des bits pl/sql) basée sur le nombre conditionnel

Quelle serait une bonne façon de remplir cette:

if (count_of_result == 3) { additionner les 3 lignes de la même table. les valeurs uniques sont additionnées & les valeurs non uniques sont supposées identiques pour toutes les 3 lignes. le résultat de la requête doit afficher 1 ligne, avec les valeurs ajoutées. } sinon {

Afficher tous les résultats de la requête comme d'habitude.

Merci.

+0

Lire sur la façon d'utiliser '' GROUP BY' et SUM (champ) 'fonction. –

+0

'CHOISIR a, b, c, SOMME (d), SOMME (e) À PARTIR DE GROUPE tableT a, b, c;', où 'd, e' sont les champs uniques. –

+0

ça sonne bien. Qu'en est-il de la «condition de compte», nous devrons faire la somme et le groupe par seulement si le compte était de 3 ou moins. – radeon

Répondre

0

Il y a probablement des moyens plus efficaces pour cela:

SELECT a,b,c, SUM(d) AS d, SUM(e) AS e 
    FROM tableT 
    WHERE (SELECT COUNT(*) FROM tableT) <= 3 
    GROUP BY a,b,c 
UNION ALL 
SELECT a,b,c,d,e 
    FROM tableT 
    WHERE (SELECT COUNT(*) FROM tableT) > 3 
; 
+0

doux! cela semble parfait. Je vous remercie – radeon

0
select a, b, c, sum(d), sum(e) from (
    select a, b, c, 
      case count(*) over(partition by a, b, c) 
      when 3 then null else rownum end as group_controller 
    from tableT 
) group by a, b, c, group_controller; 

Je pense que cela devrait fonctionner. La fonction analytique contenue dans la vue en ligne détermine s'il y aura exactement 3 lignes dans un groupe (sans agrégation). Le groupe de la requête externe requiert que do_group soit nul (ou n'importe quelle valeur constante) dans les cas où le regroupement doit être effectué (reportant ainsi un & b pour le regroupement), ou une valeur unique lorsque le groupement doit être neutralisé (rownum fera bien dans ce situation).

+0

je vous remercie pour la réponse détaillée, je pense que c'est assez proche de la solution finale. cependant, n'est pas "partition par" spécifique à t-sql? Aussi, la somme (d) et la somme (e) fonctionneraient-elles dans la solution donnée? – radeon

Questions connexes