Précédent   Forum des professionnels en informatique > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/10/2006, 17h37   #1
Membre habitué
 
Inscription : février 2005
Messages : 279
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 279
Points : 110
Points : 110
Par défaut Regroupement données différentes

Bonjour, je voudrais faire un genre de regroupement, mais au lieu de regrouper par valeur identique, je souhaiterai regrouper par données différentes.
soit une table:

champ1 | 2006
============
valeur1 | 2
valeur2 | 3

Je voudrai obtenir quelque chose du genre:

champ1 | 2006
============
valeur1+2 | 5

Merci d'avance.
nek_kro_kvlt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/10/2006, 11h55   #2
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
C'est tout a fait.... imprécis (pour ne pas dire incompréhensible )donc il serait étonnant que tu optiennes une réponse à ton probleme.
Car je pourais te dire :

Code :
SELECT Champ1, Sum(Valeur1+Valeur2) FROM TABLE GROUP BY Champ1;
Mais franchement, je ne sais pas ce qu'est Valeur1 et 2 (colonnes différentes ? ou juste valeurs diférentes ?)

Le plus difficile n'est pas de résoudre le probleme mais de l'expliquer clairement (et la plupart du temps en l'expliquant, il se résoud tout seul)
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/10/2006, 12h10   #3
Membre habitué
 
Inscription : février 2005
Messages : 279
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 279
Points : 110
Points : 110
Ce sont justes des valeurs différentes, par exemple la valeur champs1 contient valeur1, et valeur2, avec respectivement les valeurs 2 et 3, je cherche a pouvoir sortir leur somme, un peu comme un regroupement, sauf que je regrouperai avec des valeurs différentes.
Une solution serait de créer une colonne avant dans la requête avec les mêmes valeurs de façon a pouvoir faire un group by, mais je ne sais pas comment faire, a part user de procédures stockées.

en fait cela revient a faire des sommes sur des lignes.
Je ne sais pas si cela est possible...

Merci
nek_kro_kvlt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 12h06   #4
Membre du Club
 
Inscription : mai 2002
Messages : 56
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Moselle (Lorraine)

Informations forums :
Inscription : mai 2002
Messages : 56
Points : 65
Points : 65
Envoyer un message via ICQ à PierreY
Citation:
Envoyé par nek_kro_kvlt
Ce sont justes des valeurs différentes, par exemple la valeur champs1 contient valeur1, et valeur2, avec respectivement les valeurs 2 et 3, je cherche a pouvoir sortir leur somme, un peu comme un regroupement, sauf que je regrouperai avec des valeurs différentes.
Une solution serait de créer une colonne avant dans la requête avec les mêmes valeurs de façon a pouvoir faire un group by, mais je ne sais pas comment faire, a part user de procédures stockées.

en fait cela revient a faire des sommes sur des lignes.
Je ne sais pas si cela est possible...

Merci
Tu dois avoir un problème de conception. Sans ce cas précis la solution c'est

Code :
SELECT 'valeur 1 + 2', sum("2006") FROM latable WHERE champ1 = 'valeur 1' OR champ1='valeur 2'
Si tu veux d"autres solutions pour concevoir mieux un système qui réponde aux questions que tu lui poses, explique exactement ce dont tu as besoin.
PierreY est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 12h15   #5
Membre habitué
 
Inscription : février 2005
Messages : 279
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 279
Points : 110
Points : 110
imagineons que j'ai une table comme cela:

|nom pièce|surface|
===============
|Salon | 50 |
|Cuisine | 30 |
|salle d'eau| 30 |

et que je veuilles avoir la surface totale de ma maison, mais aussi par exemple pourvoir regrouper les pièces et les appeler par exemples chambres, ou alors salle de travail, salle de vie quotidienne, et choisir quelles pièces je veux, mais ce choix est fait au niveau de l'utilisateur. Je penses donc que créer une colonne à la volée puis grouper par celle ci est un bon moyen de faire ce que je veux
nek_kro_kvlt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 14h31   #6
Membre du Club
 
Inscription : mai 2002
Messages : 56
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Moselle (Lorraine)

Informations forums :
Inscription : mai 2002
Messages : 56
Points : 65
Points : 65
Envoyer un message via ICQ à PierreY
Citation:
Envoyé par nek_kro_kvlt
imagineons que j'ai une table comme cela:

|nom pièce|surface|
===============
|Salon | 50 |
|Cuisine | 30 |
|salle d'eau| 30 |

et que je veuilles avoir la surface totale de ma maison, mais aussi par exemple pourvoir regrouper les pièces et les appeler par exemples chambres, ou alors salle de travail, salle de vie quotidienne, et choisir quelles pièces je veux, mais ce choix est fait au niveau de l'utilisateur. Je penses donc que créer une colonne à la volée puis grouper par celle ci est un bon moyen de faire ce que je veux
C'est bien ce que je dis, tu as un problème de conception. Ton modèle n'est pas bon, quand on a besoin d'ajouter des colonnes pendant l'exécution du programme c'est que quelque chose a été mal pensé. Il faut ajouter des tables et des relations entre les tables. Pas des colonnes !
PierreY est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 16h46   #7
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
Code :
SELECT sum(Surface) FROM TABLE WHERE nomPiece IN ('Cuisine', 'Salon');
Resultat : 80.


De créer une colonne ou meme de mettre a jours une colonne existante va poser de gros problemes si ton programme fait des accés simultannés, s'il plante apres la création de la colonne. Etc...
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 16h58   #8
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant spécialité Firebird
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
j'ajouterai juste en plus que le nom des colonnes est accessoire, cela fait partie du "look" et donc se traite coté client pas coté serveur
mais bon avec la requete de la réponse précédente, tout va bien
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 16h59   #9
Membre habitué
 
Inscription : février 2005
Messages : 279
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 279
Points : 110
Points : 110
Je me suis peut être mal exprimé mais moi j'entendais par la un truc du genre:
Code SQL :
SELECT 'regroupement', sum(surface) WHERE piece IN('piece1','piece2') GROUP BY 1;
nek_kro_kvlt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 17h17   #10
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant spécialité Firebird
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
j'avais compris, et ce n'est bien qu'une question de look
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 17h18   #11
Membre habitué
 
Inscription : février 2005
Messages : 279
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 279
Points : 110
Points : 110
Je parlais pour barbibulle
nek_kro_kvlt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 18h22   #12
Membre du Club
 
Inscription : mai 2002
Messages : 56
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Moselle (Lorraine)

Informations forums :
Inscription : mai 2002
Messages : 56
Points : 65
Points : 65
Envoyer un message via ICQ à PierreY
Citation:
Envoyé par nek_kro_kvlt
Je me suis peut être mal exprimé mais moi j'entendais par la un truc du genre:
Code SQL :
SELECT 'regroupement', sum(surface) WHERE piece IN('piece1','piece2') GROUP BY 1;
Il n'empêche que si tu veux stocker dans la base de données le concept de "groupe de pièces' (une zone ???), tu dois créer une table des zones et une table des "pieces_de_la_zone"

Ensuite tes requêtes iront d'elles même, avec quelques jointures et des group by tu pourras facilement récupérer toutes les surfaces qiue tu veux, dans tous les sens et pour toutes les zones qui amuseront ton utilisateur.
PierreY est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 18h23   #13
Membre du Club
 
Inscription : mai 2002
Messages : 56
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Moselle (Lorraine)

Informations forums :
Inscription : mai 2002
Messages : 56
Points : 65
Points : 65
Envoyer un message via ICQ à PierreY
Citation:
Envoyé par Barbibulle
De créer une colonne ou meme de mettre a jours une colonne existante va poser de gros problemes si ton programme fait des accés simultannés, s'il plante apres la création de la colonne. Etc...
Non, c'est exactement à ça que sert un SGBD.
PierreY est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2006, 10h47   #14
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
Je parlais de création de colonne à la vollée comme il avait l'air de vouloir le faire et non en mode conception...

Si chaque client se crée dans sa transaction une colonne poubelle rien que pour pouvoir mémoriser un choix, c'est tout simplement une faute de conception et d'analyse...

Sauf cas particuliers (il y en a toujours )...
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2006, 15h53   #15
Membre du Club
 
Inscription : mai 2002
Messages : 56
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Moselle (Lorraine)

Informations forums :
Inscription : mai 2002
Messages : 56
Points : 65
Points : 65
Envoyer un message via ICQ à PierreY
Citation:
Envoyé par Barbibulle
Si chaque client se crée dans sa transaction une colonne poubelle rien que pour pouvoir mémoriser un choix, c'est tout simplement une faute de conception et d'analyse...
Oui, Oui, et OUI :-)
PierreY est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2006, 15h56   #16
Membre habitué
 
Inscription : février 2005
Messages : 279
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 279
Points : 110
Points : 110
Bah dans mon cas précis j'ai besoin de copier ce regroupement dans une autre table, alors ça me permets de copier directement avec un insert into et de spécifier la valeur du champs 'nom' de la table, j'ai pas besoin de jointures en fait...
nek_kro_kvlt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2006, 18h43   #17
Candidat au titre de Membre du Club
 
Inscription : novembre 2006
Messages : 28
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 28
Points : 10
Points : 10
Par défaut Procedure stockées

Bonjour , tu peux effectuer ce que tu demandes dans une procedure stockée mais attention si la chaine renvoyer ( CUISINE || SALON ..... ) depasse la place prevu a cet effet ...
bdurtaut est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h12.


 
 
 
 
Partenaires

Hébergement Web