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 :

with et table virtuelle


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 148
    Par défaut with et table virtuelle
    Bonjour,
    Voila j'essaye de joindre 2 requetes mais impossible j'ai un message d'erreur qui apparait , je ne sais pas pourquoi ?
    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    declare @matable TABLE(
    AGENCE varchar(20),
    REGION varchar(20),
    INGENIEUR varchar(20),
    Nb_Devis varchar(20),
    Nb_Affaires varchar(20),
    taux_Reussite decimal(38,2),
    Montant_Cdes decimal(38,2),
    Sous_traitance decimal(38,2),
    Montant_Facturation decimal(38,2))
     
    INSERT INTO @matable(
    REGION,
    AGENCE,
    INGENIEUR,
    Nb_Devis,
    Nb_Affaires,
    taux_Reussite,
    Montant_Cdes,
    Sous_traitance)
     
    WITH test AS 
    (
    SELECT 
    	Région,
    	[Global Dimension 1 Code] AS Agence,
    	No_,
    	case 
    		when No_ LIKE 'DE.%' then '1'
    	end AS Nb_Devis,
    	case 
    		when No_ LIKE 'AF.%' then '1'
    	end AS Nb_Affaires,
    	case 
    		when No_ LIKE 'D.%' then [Creation Date]
    		when No_ LIKE 'F.%' then [Date de commande]
    	end AS Date,
    	[Code Ingénieur]AS Ingenieur,
    	[Date de commande] AS Commandes,
    	[Montant Devis] AS Montant,
    	[Montant Sous-Traitance] AS Sous_traitance
    FROM dbo.[societe$Job]
    WHERE Région = 'SUD'
    )
    SELECT 
    max(Région) AS Région,
    Agence,
    Ingenieur,
    count(Nb_Devis) AS Nb_Devis,
    count(Nb_Affaires) AS  Nb_Affaires,
    (NULLIF(count(Nb_Affaires), 0)*100 /count(Nb_Devis)) AS taux_Reussite,
    sum(Montant) AS Montant,
    sum(Sous_traitance) AS Sous_traitance
    FROM test
    WHERE date BETWEEN '01/01/2010' AND '31/12/2010'
    GROUP BY Agence,Ingenieur
    ORDER BY Agence
    )
     
    INSERT INTO @matable(
    REGION,
    AGENCE,
    INGENIEUR,
    Montant_Facturation)
     
    SELECT 
    	Région,
    	Agence,
    	[Code Ingénieur]AS Ingenieur,
    	cast(([Phase A]+[Phase C]+[Phase D]+[Phase B complet])AS float) AS Montant
    FROM dbo.[societe$Statistiques]
    WHERE [Date Facture] BETWEEN '01/01/2010' AND '31/12/2010'
    	AND [Région] = 'SUD'
    SELECT
    REGION,
    AGENCE,
    INGENIEUR,
    Nb_Devis,
    Nb_Affaires,
    taux_Reussite,
    Montant_Cdes,
    Sous_traitance,
    Montant_Facturation
    FROM @matable
     
    end
    voici le message d'erreur qu'il retourne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Msg*156, Niveau*15, État*1, Ligne*22
    Syntaxe incorrecte vers le mot clé 'WITH'.
    Msg*319, Niveau*15, État*1, Ligne*22
    Syntaxe incorrecte près du mot clé «*with*». Si l'instruction est une expression de table commune ou une clause xmlnamespaces, l'instruction précédente doit se terminer par un point-virgule.
    Msg*102, Niveau*15, État*1, Ligne*58
    Syntaxe incorrecte vers ')'.
    Msg*102, Niveau*15, État*1, Ligne*86
    Syntaxe incorrecte vers 'end'.
    et si je mets un point virgule devant le with voici le message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Msg*102, Niveau*15, État*1, Ligne*22
    Syntaxe incorrecte vers ';'.
    Msg*102, Niveau*15, État*1, Ligne*58
    Syntaxe incorrecte vers ')'.
    Msg*102, Niveau*15, État*1, Ligne*86
    Syntaxe incorrecte vers 'end'.
    si quelqu'un a une idée je suis preneur
    MERCI

  2. #2
    Invité
    Invité(e)
    Par défaut
    essaie cette version avec des ; C'est le with qui les réclame comme l'indique le message d'erreur !
    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    declare @matable TABLE(
    AGENCE varchar(20),
    REGION varchar(20),
    INGENIEUR varchar(20),
    Nb_Devis varchar(20),
    Nb_Affaires varchar(20),
    taux_Reussite decimal(38,2),
    Montant_Cdes decimal(38,2),
    Sous_traitance decimal(38,2),
    Montant_Facturation decimal(38,2));
     
    INSERT INTO @matable(
    REGION,
    AGENCE,
    INGENIEUR,
    Nb_Devis,
    Nb_Affaires,
    taux_Reussite,
    Montant_Cdes,
    Sous_traitance);
     
    WITH test AS 
    (
    SELECT 
    	Région,
    	[Global Dimension 1 Code] AS Agence,
    	No_,
    	case 
    		when No_ LIKE 'DE.%' then '1'
    	end AS Nb_Devis,
    	case 
    		when No_ LIKE 'AF.%' then '1'
    	end AS Nb_Affaires,
    	case 
    		when No_ LIKE 'D.%' then [Creation Date]
    		when No_ LIKE 'F.%' then [Date de commande]
    	end AS Date,
    	[Code Ingénieur]AS Ingenieur,
    	[Date de commande] AS Commandes,
    	[Montant Devis] AS Montant,
    	[Montant Sous-Traitance] AS Sous_traitance
    FROM dbo.[societe$Job]
    WHERE Région = 'SUD'
    )
    SELECT 
    max(Région) AS Région,
    Agence,
    Ingenieur,
    count(Nb_Devis) AS Nb_Devis,
    count(Nb_Affaires) AS  Nb_Affaires,
    (NULLIF(count(Nb_Affaires), 0)*100 /count(Nb_Devis)) AS taux_Reussite,
    sum(Montant) AS Montant,
    sum(Sous_traitance) AS Sous_traitance
    FROM test
    WHERE date BETWEEN '01/01/2010' AND '31/12/2010'
    GROUP BY Agence,Ingenieur
    ORDER BY Agence
    );
     
    INSERT INTO @matable(
    REGION,
    AGENCE,
    INGENIEUR,
    Montant_Facturation);
     
    SELECT 
    	Région,
    	Agence,
    	[Code Ingénieur]AS Ingenieur,
    	cast(([Phase A]+[Phase C]+[Phase D]+[Phase B complet])AS float) AS Montant
    FROM dbo.[societe$Statistiques]
    WHERE [Date Facture] BETWEEN '01/01/2010' AND '31/12/2010'
    	AND [Région] = 'SUD'
    SELECT
    REGION,
    AGENCE,
    INGENIEUR,
    Nb_Devis,
    Nb_Affaires,
    taux_Reussite,
    Montant_Cdes,
    Sous_traitance,
    Montant_Facturation
    FROM @matable ;
     
    end

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 148
    Par défaut
    Bonjour Jerome_Mtl

    helas j'ai encore un message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Msg*102, Niveau*15, État*1, Ligne*20
    Syntaxe incorrecte vers ';'.
    Msg*102, Niveau*15, État*1, Ligne*56
    Syntaxe incorrecte vers ')'.
    Msg*102, Niveau*15, État*1, Ligne*61
    Syntaxe incorrecte vers ';'.
    Msg*102, Niveau*15, État*1, Ligne*81
    Syntaxe incorrecte vers 'end'.

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 002
    Billets dans le blog
    6
    Par défaut
    Il y avait effectivement beaucoup d'horreur syntaxiques !!!!


    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    declare @matable TABLE(
    AGENCE varchar(20),
    REGION varchar(20),
    INGENIEUR varchar(20),
    Nb_Devis varchar(20),
    Nb_Affaires varchar(20),
    taux_Reussite decimal(38,2),
    Montant_Cdes decimal(38,2),
    Sous_traitance decimal(38,2),
    Montant_Facturation decimal(38,2));
     
     
    WITH test AS 
    (
    SELECT 
    	Région,
    	[Global Dimension 1 Code] AS Agence,
    	No_,
    	case 
    		when No_ LIKE 'DE.%' then '1'
    	end AS Nb_Devis,
    	case 
    		when No_ LIKE 'AF.%' then '1'
    	end AS Nb_Affaires,
    	case 
    		when No_ LIKE 'D.%' then [Creation Date]
    		when No_ LIKE 'F.%' then [Date de commande]
    	end AS Date,
    	[Code Ingénieur]AS Ingenieur,
    	[Date de commande] AS Commandes,
    	[Montant Devis] AS Montant,
    	[Montant Sous-Traitance] AS Sous_traitance
    FROM dbo.[societe$Job]
    WHERE Région = 'SUD'
    )
    INSERT INTO @matable(
    REGION,
    AGENCE,
    INGENIEUR,
    Nb_Devis,
    Nb_Affaires,
    taux_Reussite,
    Montant_Cdes,
    Sous_traitance)
    SELECT 
    max(Région) AS Région,
    Agence,
    Ingenieur,
    count(Nb_Devis) AS Nb_Devis,
    count(Nb_Affaires) AS  Nb_Affaires,
    (NULLIF(count(Nb_Affaires), 0)*100 /count(Nb_Devis)) AS taux_Reussite,
    sum(Montant) AS Montant,
    sum(Sous_traitance) AS Sous_traitance
    FROM test
    WHERE date BETWEEN '01/01/2010' AND '31/12/2010'
    GROUP BY Agence,Ingenieur
    ORDER BY Agence;
     
    INSERT INTO @matable(
    REGION,
    AGENCE,
    INGENIEUR,
    Montant_Facturation)
    SELECT 
    	Région,
    	Agence,
    	[Code Ingénieur]AS Ingenieur,
    	cast(([Phase A]+[Phase C]+[Phase D]+[Phase B complet])AS float) AS Montant
    FROM dbo.[societe$Statistiques]
    WHERE [Date Facture] BETWEEN '01/01/2010' AND '31/12/2010'
    	AND [Région] = 'SUD';
     
    SELECT
    REGION,
    AGENCE,
    INGENIEUR,
    Nb_Devis,
    Nb_Affaires,
    taux_Reussite,
    Montant_Cdes,
    Sous_traitance,
    Montant_Facturation
    FROM @matable ;

    mais au fait pourquoi vouloir faire une variable table alors que tout peut se faire en une seule requête ? ::::

    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
    WITH test AS 
    (
    SELECT 
    	Région,
    	[Global Dimension 1 Code] AS Agence,
    	No_,
    	case 
    		when No_ LIKE 'DE.%' then '1'
    	end AS Nb_Devis,
    	case 
    		when No_ LIKE 'AF.%' then '1'
    	end AS Nb_Affaires,
    	case 
    		when No_ LIKE 'D.%' then [Creation Date]
    		when No_ LIKE 'F.%' then [Date de commande]
    	end AS Date,
    	[Code Ingénieur]AS Ingenieur,
    	[Date de commande] AS Commandes,
    	[Montant Devis] AS Montant,
    	[Montant Sous-Traitance] AS Sous_traitance
    FROM dbo.[societe$Job]
    WHERE Région = 'SUD'
    )
    SELECT 
    max(Région) AS Région,
    Agence,
    Ingenieur,
    count(Nb_Devis) AS Nb_Devis,
    count(Nb_Affaires) AS  Nb_Affaires,
    (NULLIF(count(Nb_Affaires), 0)*100 /count(Nb_Devis)) AS taux_Reussite,
    sum(Montant) AS Montant,
    sum(Sous_traitance) AS Sous_traitance
    FROM test
    WHERE date BETWEEN '01/01/2010' AND '31/12/2010'
    GROUP BY Agence,Ingenieur
    UNION ALL
    SELECT 
    	Région,
    	Agence,
    	[Code Ingénieur]AS Ingenieur,
    	0, 0, 0, 
    	cast(([Phase A]+[Phase C]+[Phase D]+[Phase B complet])AS float) AS Montant,
    	NULL
    FROM dbo.[societe$Statistiques]
    WHERE [Date Facture] BETWEEN '01/01/2010' AND '31/12/2010'
    	AND [Région] = 'SUD'
    ORDER BY Agence;

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 148
    Par défaut
    Bonjour SQLpro,
    Merci pour votre aide , la reponse a votre question est que je ne connais pas SQL , j'emprunte donc parfois des solutions lourdes sans savoir qu'il existe des raccourics simples.
    Je suis un debutant j'essaye de l'utiliser en consultant vos reponses dans les forums et differents tutorials
    Mais merci pour votre aide la premiere solution marche tres bien , j'ai les resultats que je voulais.
    un tres grand merci pour votre aide

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

Discussions similaires

  1. Création table virtuelle
    Par boutss dans le forum SQL
    Réponses: 4
    Dernier message: 04/07/2007, 14h33
  2. Tables virtuelles dans un restaurant
    Par spelaprat dans le forum Langage SQL
    Réponses: 6
    Dernier message: 23/04/2007, 17h17
  3. Réponses: 7
    Dernier message: 07/07/2006, 11h17
  4. voir les tables virtuel deleted inserted
    Par berceker united dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 19/06/2006, 14h31
  5. LIBPQ - Affichage requete dans table virtuelle
    Par Mike@Nestor dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 27/07/2005, 14h11

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