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

SQL Procédural MySQL Discussion :

Fonction définie par l'utilisateur


Sujet :

SQL Procédural MySQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2022
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Fonction définie par l'utilisateur
    Bonjour à toutes et à tous !

    J'ai le message d'erreur suivant :
    'The data types varchar and varchar are incompatible in the subtract operator.'
    Je suis conscient que c'est parce que j'essaie de faire une soustraction sur des caractères (ou peut-être que c'est pas ça du tout), mais comment je fais pour les convert en INT ?


    Voici mon code :

    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
    CREATE FUNCTION fn_GetSalesData (@aYear smallint)
    RETURNS @ReturnTable2 TABLE
    
    (
     BusinessEntityID INT,
     FirstName VARCHAR(10),
     LastName VARCHAR(30),
     [Actual Subtotal] INT,
     [Rang année courante] INT,
     [Previous Subtotal] INT,
     [Rang année précédente] INT,
     [Indicateur] VARCHAR (3)
    )
    
    AS
    
    BEGIN
    	INSERT INTO @ReturnTable2
    		SELECT
    			sp.BusinessEntityID as 'ID du commis de vente',
    			pp.FirstName as 'Prénom',
    			pp.LastName as 'Nom de famille',
    			act.[Actual Subtotal] as 'Sous-Total année courante',
    			act.[Rang année courante],
    			prv.[Previous Subtotal] as 'Sous-Total année précédente',
    			prv.[Rang année précédente],
    			CASE	
    				WHEN CONVERT(INT, RANK() OVER(ORDER BY SUM(soh.SubTotal) DESC)) - CONVERT(INT, RANK() OVER(ORDER BY SUM(soh.SubTotal) DESC)) > 0 THEN ''+''
    				WHEN CONVERT(INT, RANK() OVER(ORDER BY SUM(soh.SubTotal) DESC)) - CONVERT(INT, RANK() OVER(ORDER BY SUM(soh.SubTotal) DESC)) < 0 THEN ''-''
    				ELSE '='
    			END as Indicateur
    		FROM AdventureWorks2019.Sales.SalesPerson sp
    		INNER JOIN AdventureWorks2019.Person.Person pp on pp.BusinessEntityID = sp.BusinessEntityID
    		INNER JOIN AdventureWorks2019.Sales.SalesOrderHeader soh on soh.SalesPersonID = sp.BusinessEntityID
    		INNER JOIN (
    			SELECT 
    				FORMAT(SUM(soh1.SubTotal), 'c', 'en-us') as 'Actual Subtotal',
    				RANK() OVER(ORDER BY SUM(soh1.SubTotal) DESC) as 'Rang année courante',
    				SalesPersonID
    			FROM AdventureWorks2019.Sales.SalesOrderHeader soh1
    			INNER JOIN AdventureWorks2019.Sales.SalesPerson sp1 on sp1.BusinessEntityID = soh1.SalesPersonID
    			WHERE DATEPART(YEAR, soh1.OrderDate) = @aYear
    			GROUP BY SalesPersonID) as act on act.SalesPersonID = sp.BusinessEntityID
    		INNER JOIN (
    			SELECT 
    				FORMAT(SUM(soh1.SubTotal), 'c', 'en-us') as 'Previous Subtotal',
    				RANK() OVER(ORDER BY SUM(soh1.SubTotal) DESC) as 'Rang année précédente',
    				SalesPersonID
    			FROM AdventureWorks2019.Sales.SalesOrderHeader soh1
    			INNER JOIN AdventureWorks2019.Sales.SalesPerson sp1 on sp1.BusinessEntityID = soh1.SalesPersonID
    			WHERE DATEPART(YEAR, soh1.OrderDate) = (@aYear - 1)
    			GROUP BY SalesPersonID) as prv on prv.SalesPersonID = sp.BusinessEntityID
    
    		WHERE DATEPART(YEAR, soh.OrderDate) = @aYear
    		GROUP BY 
    			sp.BusinessEntityID, 
    			pp.FirstName, 
    			pp.LastName, 
    			act.[Actual Subtotal], 
    			act.[Rang année courante], 
    			prv.[Previous Subtotal],
    			prv.[Rang année précédente]
    
    	RETURN
    
    END;

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 849
    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 : 21 849
    Points : 52 972
    Points
    52 972
    Billets dans le blog
    6
    Par défaut
    Il faut commencer par les transtyper !

    A +

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2022
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Bonjour, possible d'être un peut plus explicite svp ? Où dois-je les transtyper ? J'ai fait un CONVERT, mais ça ne fonctionne pas. Il faudrait que je fasse un CAST ? ou c'est l'emplacement de mon Transtypage qui n'est pas ok ?

    Merci de tes lumières !

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2022
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    C'est bon j'ai trouvé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CASE	
    				WHEN CAST(RANK() OVER(ORDER BY SUM(soh.SubTotal) DESC) - RANK() OVER(ORDER BY SUM(soh.SubTotal) DESC) as int) > 0 THEN '+'
    				WHEN CAST(RANK() OVER(ORDER BY SUM(soh.SubTotal) DESC) - RANK() OVER(ORDER BY SUM(soh.SubTotal) DESC) as int) < 0 THEN '-'
    				ELSE '='
    Merci !

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

Discussions similaires

  1. Fonctions définies par les utilisateurs
    Par zglurb dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 19/10/2011, 11h19
  2. SQL dynamique dans une fonction définie par l'utilisateur
    Par messalux dans le forum Développement
    Réponses: 7
    Dernier message: 11/11/2010, 09h25
  3. Fonction défini par l'utilisateur
    Par m-mas dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 19/07/2005, 09h45
  4. SQL Server / Fonction définie par l'utilisateur
    Par borgfabr dans le forum Langage SQL
    Réponses: 3
    Dernier message: 08/03/2005, 15h14
  5. Fonctions définies par l'utilisateur
    Par DiGueDao dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 25/06/2003, 11h17

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