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 :

COALESCE ou ISNULL


Sujet :

Développement SQL Server

  1. #1
    Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 2
    Par défaut COALESCE ou ISNULL
    Bonjour à tous,

    je vous écris car j'ai un problème que je n'arrive pas à résoudre seul malgré quelques jours de recherche sur le net. Je me suis dit qu'une âme charitable voudra peut-être bien m'aider

    le code ci-dessous débouche sur un tableau de prestations horaires d'employés via un pivot. (ce point-là fonctionne). j'ai donc un tableau contenant les nom en ordonnée et les dates en abscisse. les cellules sont complétées par le temps de travail de l'employé. j'ai évidemment fait une jonction avec un tableau calendrier afin de récupérer les dates où personne ne preste par exemple + quelques options que je pourrai rajouter comme les N° de semaine, congés légaux etc.

    Mon gros problème est que je n'arrive pas à remplacer les valeurs NULL par des 0. certaines mauvaises langues diront que c'est parce que je suis nul

    Donc pour résumer, je pars de :

    - création de la table TEMP_X
    - insert des données sélectionnées de la table workload dans TEMP_X
    - processing pour respecter les règles internes
    - mise en place du pivot et jointure avec le calendrier [Auxiliary].[Calendar]

    le code est ci-dessous. un grand merci d'avance.

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    CREATE TABLE [HRM].[dbo].[TEMP_X](
     [Oid] [nvarchar](50) NULL,
     [Name] [nvarchar](250) NULL,
     [Date] [nvarchar](8) NULL,
     [Time] [int] NULL,
     [CodeStatus] [int] NULL,
    ) ON [PRIMARY]
     
    INSERT INTO [HRM].[dbo].[TEMP_X] (Oid,Name,Date,Time)
    SELECT a.Oid,FirstName +' '+LastName,date,sum(time)as time from [HRM].[dbo].[Workload] a
    inner join [HRM].[dbo].[EMP_Employee] b
    on a.oid = b.oid
    WHERE codestatus <> '3' and codestatus <> '300' and codestatus <> '-1'
    GROUP BY a.oid,FirstName +' '+LastName,date
     
    UPDATE [HRM].[dbo].[TEMP_X]
    set CodeStatus = '1'
    where CodeStatus is null
     
     
    INSERT INTO [HRM].[dbo].[TEMP_X] (Oid,Name,Date,Time)
    SELECT a.oid,FirstName +' '+LastName,date,sum(time)as time from [HRM].[dbo].[Workload] a
    inner join [HRM].[dbo].[EMP_Employee] b
    on a.oid = b.oid
    WHERE codestatus = '3' or codestatus = '300' or codestatus = '-1'
    GROUP BY a.oid,FirstName +' '+LastName,date
     
    UPDATE [HRM].[dbo].[TEMP_X]
    SET CodeStatus = '0'
    WHERE CodeStatus is null
     
    UPDATE [HRM].[dbo].[TEMP_X]
    SET Time = 
    (
     CASE
      WHEN Time >= '120000' and CodeStatus = 0 THEN 120000
      ELSE Time
     END
    )
     
    declare c cursor  for select distinct (CONVERT(char(10), a.date,112)) from  [Auxiliary].[Calendar] a left join [HRM].[dbo].[TEMP_X] b on CONVERT(char(10), a.date,112) = b.date  where a.Date >= '20160801' and a.Date <= '20160818'
    declare @pivot nvarchar(max), @sum nvarchar(max), @sql nvarchar(max), @sql2 nvarchar(max), @sql3 nvarchar(max), @col nvarchar(max), @A int, @B int , @D nvarchar(max)
     
    select @pivot='',  @sum='', @D=''
     
    open c
    fetch c into @col
    while @@FETCH_STATUS = 0
     begin
     
      select 
         @pivot =  @pivot + ' ['+ cast(@col as varchar(30)) +'], ',
         @sum = @sum + 'ROUND (SUM (cast(['+ cast (@col as varchar(30)) +']as float))/360000,2) AS ['+ cast(@col as varchar(30)) +'],'
     
     fetch c into @col
     end
    close c
    deallocate  c
     
     
    set @sql = 'SELECT Name, '+ left(@sum, len(@sum)-1) + '
        FROM [HRM].[dbo].[TEMP_X]
        PIVOT 
        (SUM (Time)
        FOR Date IN ('+ left(@pivot, len(@pivot)-1)+ ')) AS Date
        --where Oid = ''KgWVwBwK''
        GROUP BY Name'    
     
    exec(@sql)
     
    DROP TABLE [HRM].[dbo].[TEMP_X]

  2. #2
    Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 2
    Par défaut réponse trouvé seul
    Bonjour à tous,

    j'ai trouvé la réponse à ma question en cherchant encore un peu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    @sum = @sum + 'isnull(ROUND (SUM (cast(['+ cast (@col as varchar(30)) +']as float))/360000,2),0) AS ['+ cast(@col as varchar(30)) +'],'

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2008R2] ISNULL ou COALESCE ?
    Par Papy214 dans le forum Développement
    Réponses: 6
    Dernier message: 01/04/2013, 10h24
  2. différence entre isnull et coalesce
    Par mdevlieg dans le forum Langage SQL
    Réponses: 5
    Dernier message: 15/05/2009, 12h45
  3. [coalesce]probleme de requete
    Par Snowballz dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 15/10/2004, 16h32
  4. [ACESS][MEMO][ISNULL]Comportement bizarre
    Par seb.49 dans le forum ASP
    Réponses: 2
    Dernier message: 09/06/2004, 11h44
  5. Fonction COALESCE
    Par sbeu dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 08/01/2004, 15h27

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