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

MS SQL Server Discussion :

query excel depuis sql server


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    776
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 776
    Par défaut query excel depuis sql server
    salut le phorum
    voilà mon problème
    j'ai réalisé via access une BDD avec sql server
    a l'aide de formulaire un outil access permet a plusieurs personnes de gérer des appels sortants et entrants
    cela fonctionne très bien par contre pour créer des reporting je passe par excel car ce n'est pas une grosse base...
    donc j'ai créer mes liens qui vont bien pour relier les tables sql server vers excel
    mais si je veux creer une requête avec des conditions cela me met le message
    syntaxe incorrecte vers '='
    par contre sans condition iif cela fontionne très bien
    voici le code utilisé (pour info ce code fonctionne très bien dans access puisque je l'ai pris d'access pour le copier dans le query mais ca bloque)
    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
    SELECT 
    T_PLANNING_CLIENT.Num_protocole AS [Numéro Protocole],
    T_PROTOCOLE.[Nombre de visites], 
    Min(T_PLANNING_CLIENT.Date) AS [Date Début], 
    Count(T_PLANNING_CLIENT.Date) AS [Nombre de volontaire demandé],
    Sum(IIf(T_PLANNING_CLIENT.[RDV pris]=2,0,T_PLANNING_CLIENT.[RDV pris])) AS [Nombre de volontaire recruté],
    Count(T_PLANNING_CLIENT.Date) - Sum(T_PLANNING_CLIENT.[RDV pris]) AS Delta
     
    FROM T_PLANNING_CLIENT 
    INNER JOIN T_PROTOCOLE ON T_PLANNING_CLIENT.Num_protocole = T_PROTOCOLE.Numéro 
     
    WHERE T_PLANNING_CLIENT.Visites = 1 
     
    GROUP BY T_PLANNING_CLIENT.Num_protocole, 
    T_PROTOCOLE.[Nombre de visites], 
    T_PLANNING_CLIENT.Visites,
    Sum(IIf(T_PLANNING_CLIENT.[RDV pris]=2,0,T_PLANNING_CLIENT.[RDV pris])) AS [Nombre de volontaire recruté]
     
    ORDER BY T_PLANNING_CLIENT.Num_protocole;
    merci d'avance pour toutes pistes ou solutions
    munity

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    10 secondes de recherche vous auraient donné la réponse en utilisant votre moteur de recherche préféré
    IIf n'existe pas en SQL, et peut être réécrit en utilisant la clause CASE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT		PC.Num_protocole AS [Numéro Protocole]
    		, P.[Nombre de visites]
    		, MIN(PC.Date) AS [Date Début]
    		, COUNT(PC.Date) AS [Nombre de volontaire demandé]
    		, SUM(CASE C.[RDV pris] WHEN 2 THEN 0 ELSE PC.[RDV pris] END) AS [Nombre de volontaire recruté]
    		, COUNT(PC.Date) - SUM(PC.[RDV pris]) AS Delta 
    FROM		dbo.PC AS PC
    INNER JOIN 	db.T_PROTOCOLE AS P ON PC.Num_protocole = P.Numéro 
    WHERE		PC.Visites = 1 
    GROUP BY	PC.Num_protocole
    		, P.[Nombre de visites]
    		, PC.Visites
    		, CASE C.[RDV pris] WHEN 2 THEN 0 ELSE PC.[RDV pris] END
    ORDER BY 	PC.Num_protocole
    En outre, utiliser des noms de colonnes contenant des espaces ou des caractères diacritiques est une très mauvaise idée qui peut vous conduire à de gros problèmes.

    @++

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    776
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 776
    Par défaut
    merci pour ta réponse
    oui je sais pour les espaces dans les noms de colonnes
    je débute en BDD alors un peu de compréhension
    siou plé missié
    pour la prochaine base de données je le ferais plus
    par contre pourquoi cela fonctionne dans access le iif
    ou tu vas me dire que cela n'a rien a voir mais cela reste du sql ou cela veut dire qu'il y a plusieurs syntaxe en sql...
    ben si c'est le cas c'est pas gagné pour moi....
    Ah oui je me suis permis de corriger ton code il y avait des erreurs (travail d'amateur... )
    SUM(CASE PC.[RDV pris] WHEN 2 THEN 0 ELSE PC.[RDV pris] END) AS
    en tout cas un grand merci à toi en ce premier jour de l'an de grace 2011
    munity

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    776
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 776
    Par défaut
    j'aurais encore besoin d'un petit conseil
    voici mon code
    apparemment la ligne qui contient <= ne passe pas syntaxe erreur sur '<='
    je suppose que c'est le meme probleme que pour le '=' mais je ne vois pas trop quel opérateur on peut mettre pour un inférieur ou égal
    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
    SELECT		PC.Num_protocole AS [Numéro Protocole]
    		, P.[Nombre de visites]
    		, MIN(PC.Date) AS [Date Début]
    		, COUNT(PC.Date) AS [Nombre de volontaire demandé]
    		, SUM(CASE PC.[RDV pris] WHEN 2 THEN 0 ELSE PC.[RDV pris] END) AS [Nombre de volontaire recruté]
    		, COUNT(PC.Date) - SUM(PC.[RDV pris]) AS Delta 
    		, CASE PC.[RDV Pris] 
    		WHEN 2 
    		THEN "Test Annulé" 
    		WHEN PC.[Date] <= now()		THEN "Test en cours" 
    		ELSE "Test à planifier" 				
    		END AS [Statut du test]				
    
    FROM		dbo.T_PLANNING_CLIENT AS PC				
    INNER JOIN 	dbo.T_PROTOCOLE AS P ON PC.Num_protocole = P.Numéro 					
    WHERE		PC.Visites = 1 				
    GROUP BY	PC.Num_protocole					
    		, P.[Nombre de visites]				
    		, PC.Visites				
    		, CASE PC.[RDV pris] WHEN 2 THEN 0 ELSE PC.[RDV pris] END				
    ORDER BY 	PC.Num_protocole
    merci en tout cas

    munity

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    776
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 776
    Par défaut
    re
    bon je pense avoir trouvé pour inclure des opérateurs dans ma requête comme = ou <=
    par contre je souhaiterai inclure un test sur une date mais tous les noms que j'indique pour avoir la date du jour m'indique que la fonction n'existe pas voir texte en rouge dans le code
    quel est la bonne fonction a employer sachant que j'ai également utilisé
    Date()
    sysdate()
    now()
    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
    SELECT 
    PC.Num_protocole AS [Numéro Protocole]
    , P.[Nombre de visites]
    , MIN(PC.Date) AS [Date Début]
    , COUNT(PC.Date) AS [Nombre de volontaire demandé]
    , SUM(CASE PC.[RDV pris] WHEN 2 THEN 0 ELSE PC.[RDV pris] END) AS [Nombre de volontaire recruté]
    , COUNT(PC.Date) - SUM(CASE PC.[RDV pris] WHEN 2 THEN 0 ELSE PC.[RDV pris] END) AS Delta 
    , CASE 
    WHEN PC.[RDV Pris]= 2 THEN 'Test Annulé' 
    WHEN MIN(PC.Date) <= CURDATE() THEN 'Test en cours'
    ELSE 'Test à planifier' 
    END as [Statut Test]
    
    FROM dbo.T_PLANNING_CLIENT AS PC
    INNER JOIN dbo.T_PROTOCOLE AS P ON PC.Num_protocole = P.Numéro 
    
    WHERE		PC.Visites = 1 
    
    GROUP BY 
    PC.Num_protocole
    , P.[Nombre de visites]
    , PC.Visites
    , CASE 
    WHEN PC.[RDV Pris]= 2 THEN 'Test Annulé'  
    WHEN MIN(PC.Date) <= CURDATE() THEN 'Test en cours'
    ELSE 'Test à planifier' END
    
    ORDER BY PC.Num_protocole

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    776
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 776
    Par défaut
    J'ai trouvé la solution il faut mettre GETDATE().

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/03/2012, 10h53
  2. Importation d'une feuille excel vers sql server 2005
    Par transistor49 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 16/09/2009, 19h31
  3. Importé un fichier excel sous SQL Server 2005
    Par summer91 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 01/05/2006, 10h52
  4. Réponses: 3
    Dernier message: 11/10/2005, 09h46
  5. Exportation automatique Excel vers SQL Server
    Par jhalawa dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 14/07/2005, 11h45

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