Requête qui renvoi ttes les colonnes nulles
doudou2015
-
doudou2015 -
doudou2015 -
Bonjour,
Bonjour,
j'ai une table qui contient 60 colonnes: ELEMENT(ID_ELEMENT, DATE_DEBUT, COEFFICIENT, COUT,...)
Je voudrais savoir comment peut on écrire une requête SQL qui renvoi les colonnes qui sont toujours vides = 'null' (jamais saisies).
Ce que j'ai comme solution c'est de tester chaque colonne individuellement avec la requête suivante :
SELECT COUNT (*) FROM ELEMENT WHERE COEFFICIENT IS NOT NULL;
Si elle renvoi 0, ça veut dire que toutes les lignes de ma table ELEMENT ont une valeur nulle pour la colonne COEFFICIENT.
Celle ci fonctionne bien, mais le problème ce que je ne peux pas le faire pour 60 colonnes !
Je vous pri de me proposer vos idées ! Merci d'avance
Bonjour,
j'ai une table qui contient 60 colonnes: ELEMENT(ID_ELEMENT, DATE_DEBUT, COEFFICIENT, COUT,...)
Je voudrais savoir comment peut on écrire une requête SQL qui renvoi les colonnes qui sont toujours vides = 'null' (jamais saisies).
Ce que j'ai comme solution c'est de tester chaque colonne individuellement avec la requête suivante :
SELECT COUNT (*) FROM ELEMENT WHERE COEFFICIENT IS NOT NULL;
Si elle renvoi 0, ça veut dire que toutes les lignes de ma table ELEMENT ont une valeur nulle pour la colonne COEFFICIENT.
Celle ci fonctionne bien, mais le problème ce que je ne peux pas le faire pour 60 colonnes !
Je vous pri de me proposer vos idées ! Merci d'avance
A voir également:
- Requête qui renvoi ttes les colonnes nulles
- Comment faire des colonnes sur word - Guide
- Classer par ordre alphabétique excel plusieurs colonnes - Guide
- Inverser deux colonnes excel - Guide
- Désactiver renvoi d'appel ooredoo - Forum Mobile
- Desactiver renvoi mobilis ✓ - Forum telephonie fixe
1 réponse
Salut,
Tu peux faire un SQL dynamique, par exemple celui-ci te dit pour chaque table et chaque colonne le nombre de champs non nuls par rapport au nombre total de lignes...
declare
v_query varchar2 (2000);
v_count number;
v_result number;
type dyncurs is ref cursor;
c_cursor2 dyncurs;
cursor c_cursor is
select table_name, column_name
from all_tab_columns
where table_name in ('<Nom de ta table ou liste de tables>);
begin
for c in c_cursor loop
v_query := 'select count (1) from ' || c.table_name;
execute immediate v_query into v_count;
v_query := 'select count (1) from ' || c.table_name || ' where ' || c.column_name || ' is not null';
open c_cursor2 for v_query;
fetch c_cursor2 into v_result;
while c_cursor2%found loop
dbms_output.put_line (c.table_name || '.' || c.column_name || ' : ' || v_result || ' / ' || v_count);
fetch c_cursor2 into v_result;
end loop;
close c_cursor2;
end loop;
end;
/
Tu peux faire un SQL dynamique, par exemple celui-ci te dit pour chaque table et chaque colonne le nombre de champs non nuls par rapport au nombre total de lignes...
declare
v_query varchar2 (2000);
v_count number;
v_result number;
type dyncurs is ref cursor;
c_cursor2 dyncurs;
cursor c_cursor is
select table_name, column_name
from all_tab_columns
where table_name in ('<Nom de ta table ou liste de tables>);
begin
for c in c_cursor loop
v_query := 'select count (1) from ' || c.table_name;
execute immediate v_query into v_count;
v_query := 'select count (1) from ' || c.table_name || ' where ' || c.column_name || ' is not null';
open c_cursor2 for v_query;
fetch c_cursor2 into v_result;
while c_cursor2%found loop
dbms_output.put_line (c.table_name || '.' || c.column_name || ' : ' || v_result || ' / ' || v_count);
fetch c_cursor2 into v_result;
end loop;
close c_cursor2;
end loop;
end;
/
peux tu m'expliquer un peu plus le code ? je n'ai jamais utilisé des requêtes sql dynamique et je n'arrive pas à l'appliquer ..
Merci encore une fois :)