Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1063 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  table SQL Ajouter une colonne au lieu de creer une nouvelle table

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

table SQL Ajouter une colonne au lieu de creer une nouvelle table

n°1956737
kcni1983
Posté le 11-01-2010 à 11:54:26  profilanswer
 

Hello,  
 
je dois creer une table avec certaines proprietes qui sont calculée et extraite de ma base de donnée  
 
pour le momemt pour chaque proprieté je cree une nouvelle table
 
et j'aimerais savoir si c'est possible de le faire avec une seule table en rajoutant a chaque fois une nouvelle colonne, j'ai essayer mais je suis bloqué a un moment.. CF code  
 
 
CREATE TABLE "WEALTH"  // creation de la table (pas de probleme  
(
"SKA" VARCHAR2(30),
"WEALTH_SUM" NUMBER,  
"LI_SUM" NUMBER,  
"AI_SUM" NUMBER,  
"EQ_SUM" NUMBER,  
"BO_SUM" NUMBER,  
"MI_SUM" NUMBER);
 
 
INSERT INTO WEALTH (WEALTH_SUM,SKA)                   // On remplit les 2 premieres colonnes pas de probleme  
SELECT  CLIENT.SKA, SUM(CLIENT_ASSETS.VALUECHF)
FROM CLIENT_ASSETS,CLIENT
WHERE
CLIENT.SKA=CLIENT_ASSETS.SKA
GROUP BY CLIENT.SKA;
 
 
INSERT INTO WEALTH(LI_SUM)                                    // maintenant la 3e colonne il faudrait inclure pour chaque client cette valeur calculée  
SELECT  SUM(CLIENT_ASSETS.VALUECHF)
FROM CLIENT_ASSETS  
   WHERE
           (WEALTH.SKA=CLIENT_ASSETS.SKA
   AND  
           
            CLIENT_ASSETS.AC  
         
             IN  
   (
      select AIS_ACAT_MAP.AISCAT
      from AIS_ACAT_MAP
      where AIS_ACAT_MAP.AC='LI')
    )
GROUP by WEALTH.SKA
;
 

mood
Publicité
Posté le 11-01-2010 à 11:54:26  profilanswer
 

n°1956773
kcni1983
Posté le 11-01-2010 à 13:19:15  profilanswer
 

En relisant mon texte, je me dis que c'est peut etre bon de preciser que la 3e colonne est en faite un sous-ensemble de la 2e...  

n°1956782
boboss75
Posté le 11-01-2010 à 13:38:57  profilanswer
 

Tu ne peux pas créer une sorte de table de référence "Type_Propriété" ?
ou tu y insèrerais ton paramétrage sur ta propriété
 
et puis ensuite tu fait un lien entre ta table WEALTH et ta table "Type_Propriété" (en espérant que tu n'est pas besoin de spécificité pour chaque propriété)

n°1956787
kcni1983
Posté le 11-01-2010 à 13:43:56  profilanswer
 

oui cette solution est possible mais j'aimerais pouvoir ajouter la colonne directement... en faisant 2 tables puis une union des 2 tables je sais le faire.. maintenant j'aimerais savoir s'il est possible d'indexer 2 colonnes differentes (faisant des operations sur des lignes differentes) avec le même identifiant (ma premiere colonne dans ce cas...  
Merci d'avance :-)

n°1956794
rocodido
Posté le 11-01-2010 à 13:54:24  profilanswer
 

pourquoi pas une vue ?

n°1956811
kcni1983
Posté le 11-01-2010 à 14:13:31  profilanswer
 

le rpobleme c'est qu'il faudrait que je puisse l'utiliser comme une table..  
 

n°1956967
kcni1983
Posté le 11-01-2010 à 19:01:34  profilanswer
 

merci a ceux qui ont deja fait l'effort de lire :-) je debute alors j'ai probablement rater qqch d'evident.  
 
Bon je tente d'expliquer mon probleme differemments  
 
voila un exemple de tableau (
 
fruits / couleurs /nombre  
cerise rouge 10  
cerise verte 5  
cerise rouge 4  
ananas jaune 3  
ananas vert 5  
 
et moi ce que j'aimerais faire c'est un tableau qui me donne  
 
fruit /jaune /vert /rouge/ total  
cerise 0 5 14 19  
ananas 3 5 0 8  
 
 
ça doit etre faisable en une seule requete non? le probleme etant que les sommes ne sont pas sur les memes lignes...
 
 
 
 
 

n°1957119
MagicBuzz
Posté le 12-01-2010 à 11:14:59  profilanswer
 

Voici une piste qui pourrait bien résoudre ton problème d'ajout de colonnes dynamiquement :

 

http://forum.hardware.fr/hfr/Progr [...] m#t1668734

 

(et plus généralement, je t'invite à consulter l'ensemble du topic, j'ai tenté d'y apporter le plus d'informations possibles pour prendre en main le SQL et la modélisation avancée)


Message édité par MagicBuzz le 12-01-2010 à 11:15:58
n°1957271
E-Nyar
I ain't no nice guy after all
Posté le 12-01-2010 à 18:09:51  profilanswer
 

si je reprends la table des fruits :
 
create table toto
(fruits varchar2(20),
 couleurs varchar2(20),
 nombre  number
);
 
insert into toto values ('cerise', 'rouge', '10');
insert into toto values ('cerise', 'verte', '5');
insert into toto values ('cerise', 'rouge', '4');
insert into toto values ('ananas', 'verte', '3');
insert into toto values ('ananas', 'jaune', '5');
commit;
 
ensuite avec un fichier script sql (test.sql par exemple) je génère dynamiquement les colonnes de somme (pivot sur décode / sum) :

store set saved_settings replace
set echo off feedback off heading off pages 0 verify off
spool query.sql
prompt break on report
prompt select   fruits
select  ', max (decode (couleurs, ''' || couleurs || ''', cnt, 0)) couleurs_' || couleurs
from   (select distinct couleurs from toto)
/
prompt from     (select   couleurs, fruits, sum(nombre) cnt  
prompt           from    toto
prompt           group by couleurs, fruits)
prompt group by fruits
prompt /
spool off
start saved_settings
start query.sql


 
Résultat :

Code :
  1. SQL> @test.sql
  2. Úcrit file saved_settings
  3. break on report
  4. select   fruits
  5. , max (decode (couleurs, 'jaune', cnt, 0)) couleurs_jaune
  6. , max (decode (couleurs, 'rouge', cnt, 0)) couleurs_rouge
  7. , max (decode (couleurs, 'verte', cnt, 0)) couleurs_verte
  8. from     (select   couleurs, fruits, sum(nombre) cnt
  9. from     system.toto
  10. group by couleurs, fruits)
  11. group by fruits
  12. /
  13. cerise                            0             14              5
  14. ananas                            5              0              3



---------------
Don't fuck me, I'm anonymous.
n°1957273
E-Nyar
I ain't no nice guy after all
Posté le 12-01-2010 à 18:19:51  profilanswer
 

Pour le total c'est un peu plus compliqué et il faut feinter quelque peu :

store set saved_settings replace
set echo off feedback off heading off pages 0 verify off
spool query.sql
prompt break on report
prompt select   fruits
select  ', max (decode (couleurs, ''' || couleurs || ''', cnt, 0)) couleurs_' || couleurs
from   (select distinct couleurs from system.toto)
/
select ', max (decode (couleurs, ''' || min_couleurs || ''', cnt, 0))'
from   (select min (couleurs) min_couleurs from system.toto)
/
select '+ max (decode (couleurs, ''' || other_couleurs || ''', cnt, 0))'
from   (select distinct couleurs other_couleurs from system.toto where couleurs >
        (select min(couleurs) from system.toto))
/
prompt as total
prompt from     (select   couleurs, fruits, sum(nombre) cnt
prompt           from     system.toto
prompt           group by couleurs, fruits)
prompt group by fruits
prompt /
spool off
start saved_settings
start query.sql



Message édité par E-Nyar le 12-01-2010 à 18:22:54

---------------
Don't fuck me, I'm anonymous.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  table SQL Ajouter une colonne au lieu de creer une nouvelle table

 

Sujets relatifs
Créer débrideur depositfile[WORD] créer une macro excel créan un word
comparer une colonne d'un workbook source avec 2 autres workbookRequête SQL complexe
[SHELL] Ajouter une chaine de caractère particulière dans un fichiercréer un tableau a partir d'une chaine
Faire une requete SQL sur joomlaDataGridView non lié, ajouter une ligne.
[SQL SERVER 2008] Backup loginsMy SQL, Wordpress ... SOS je suis perdu
Plus de sujets relatifs à : table SQL Ajouter une colonne au lieu de creer une nouvelle table


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR