IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Problème de NULL sur un Pivot basé sur une Table Dynamique


Sujet :

Développement SQL Server

  1. #1
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 316
    Points : 146
    Points
    146
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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!

  2. #2
    Membre à l'essai
    Homme Profil pro
    Expert Base de Données
    Inscrit en
    Janvier 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Expert Base de Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 16
    Points : 19
    Points
    19
    Par défaut
    Moi pour remplacer les NULL par une valeur (0 par exemple) j'utilise

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CASE WHEN <field> IS NULL THEN 0 ELSE <field> END

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 140
    Points : 89
    Points
    89
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        SELECT @ListeJLValeurs = ISNULL(@ListeJLValeurs , '') +  (SELECT   JL + '= isnull(' + JL + ',0),'  FROM #tmp_JL_SGA where id = Indice)    FROM CTE_LISTE_COLONNES
    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            + ' select convert(varchar,Datreal,103) as date, matr, [OF], I, ' + @listeJLValeurs

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT COALESCE(NULL, 0)
    => 0

Discussions similaires

  1. Cliquer sur un élément basé sur une ListView
    Par IndexProg dans le forum Composants graphiques
    Réponses: 1
    Dernier message: 19/11/2013, 02h01
  2. Probleme sur un formulaire basé sur une vue
    Par mattmax dans le forum IHM
    Réponses: 0
    Dernier message: 02/08/2013, 14h19
  3. Réponses: 7
    Dernier message: 24/09/2012, 23h12
  4. Réponses: 1
    Dernier message: 14/02/2011, 11h43
  5. Réponses: 10
    Dernier message: 17/08/2010, 11h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo