Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
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 27/07/2011, 14h50   #1
Candidat au titre de Membre du Club
 
Inscription : octobre 2006
Messages : 43
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 43
Points : 13
Points : 13
Par défaut Problème de NULL sur un Pivot basé sur une Table Dynamique

Bonjour à tous,

Je tente de résoudre mon problème de NULL généré par un pivot basé sur une table construite dynamiquement. En fait, puisque certaine colonne générée ne match pas avec certaine données, la fonction "Pivot" inserre un "NULL", ce qui est logique.. Et là brouillard, comment remplacer les NULL par "0", je ne sais comment contourner ce problème.
Sans doute un morceau du code sera mieux qu'une longue explication...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
 
-- Création de la liste des Jalons pour la table PivJL
	;WITH
		CTE_LISTE_COLONNES AS
		(
				SELECT @numPremiereColonne Indice
			UNION ALL
				SELECT Indice + 1
				FROM CTE_LISTE_COLONNES
				WHERE Indice <  @numDerniereColonne
		)
 
	SELECT @ListeJL = ISNULL(@ListeJL, '') + (SELECT JL FROM #tmp_JL_SGA where id = Indice) + ', '
	FROM CTE_LISTE_COLONNES
 
 
	-- Suppression de la dernière virgule de la chaine
	SELECT @SQL = SUBSTRING(@SQL, 1, LEN(@SQL) - 1)
	SELECT @ListeJL = SUBSTRING(@ListeJL, 1, LEN(@ListeJL) - 1)
 
	-- Ajout de l'instruction CREATE TABLE
	SET @SQL = 'CREATE TABLE ' + @nomTable + '(DATE datetime, MATR char(4), [OF] char(9),I char(1), ' + @SQL + ')'
 
 
	EXEC (@SQL)
 
-------------
-- Pivot Jalon : Insertion des valeurs
	declare @chaine varchar(max)
	SET @chaine = '
		Insert into dbo.PivJL '
 
		+ ' select convert(varchar,Datreal,103) as date, matr, [OF], I, ' + @listeJL
				+ ' from '
				+ '	(select Datreal, matr, [OF],I,JL,MR_Q from dw_analyse_rebut ) d ' -- where datreal between '''+@datedeb+''' and '''+@datefin+''' and micro IN (SELECT ITEM FROM [DBO].[FCTSPLITTOCHAR]('''+@Micro+''', '',''))) d '
				+ 'pivot '
				+ '( '
				+ 'sum(MR_Q) '
				+ 'For JL in '
				+ ' ('+@listeJL+') '
				+ ') AS pvt '
 
				+ 'where [OF] = ''50942074'' '
 
	--print @chaine
	exec (@chaine)
 
--select * from dbo.PivJL
A votre écoute si vous avez besoin de plus d'info..
MERCI!
guilld est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 10h34   #2
Candidat au titre de Membre du Club
 
Inscription : janvier 2009
Messages : 14
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 14
Points : 14
Points : 14
Moi pour remplacer les NULL par une valeur (0 par exemple) j'utilise

Code :
CASE WHEN <field> IS NULL THEN 0 ELSE <field> END
michaud_fr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 11h22   #3
Membre du Club
 
Inscription : juin 2007
Messages : 115
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 115
Points : 41
Points : 41
Code :
    SELECT @ListeJLValeurs = ISNULL(@ListeJLValeurs , '') +  (SELECT   JL + '= isnull(' + JL + ',0),'  FROM #tmp_JL_SGA where id = Indice)    FROM CTE_LISTE_COLONNES
puis
Code :
        + ' select convert(varchar,Datreal,103) as date, matr, [OF], I, ' + @listeJLValeurs
azur668 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2011, 15h05   #4
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Bonjour,

Citation:
Envoyé par michaud_fr Voir le message
Moi pour remplacer les NULL par une valeur (0 par exemple) j'utilise

Code :
CASE WHEN <field> IS NULL THEN 0 ELSE <field> END
COALESCE est là pour ça : Cette fonction renvoi le premier de ses paramètres non NULL

Code SQL :
1
2
3
 
SELECT COALESCE(NULL, 0)
=> 0
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h21.


 
 
 
 
Partenaires

Hébergement Web