Pourquoi le SQL est important dans Salesforce Marketing Cloud
Salesforce Marketing Cloud (SFMC) est une plateforme puissante pour gérer les données client, concevoir des campagnes personnalisées et analyser les performances. Bien que les filtres par glisser-déposer offrent un moyen simple de segmenter les données, ils sont souvent insuffisants pour les cas d’utilisation avancés. C’est là que le SQL (Structured Query Language) devient essentiel.
Dans SFMC, le SQL vous permet de :
- Personnaliser la sortie : Définir des colonnes spécifiques et les renommer pour plus de lisibilité.
 - Gérer des conditions complexes : Appliquer une logique de filtrage avancée au-delà des filtres.
 - Intégrer plusieurs sources : Combiner des données issues de plusieurs Data Extensions ou Data Views.
 - Automatiser des processus : Utiliser le SQL dans les Query Activities au sein de l’Automation Studio pour des segmentations planifiées.
 
Guide du débutant pour le SQL dans SFMC
      Contrairement au SQL standard, SFMC ne prend en charge que l’instruction SELECT.
      Vous pouvez extraire des données, mais vous ne pouvez pas les modifier directement dans la
      base (INSERT, UPDATE et DELETE ne sont pas pris en charge).
      Voici un aperçu rapide de la syntaxe de base :
    
SELECT column1, column2, ...
FROM DataExtensionName
WHERE condition;
    
    Exemple pratique
Supposons que vous souhaitiez extraire tous les abonnés actifs :
SELECT SubscriberKey, EmailAddress
FROM _Subscribers
WHERE Status = 'Active';
    
    
    Techniques SQL avancées dans SFMC
1. JOIN : Combiner des sources de données
SFMC vous permet de joindre les données de plusieurs tables. Par exemple, si vous souhaitez combiner les données d’abonnés avec leurs données d’engagement :
SELECT s.SubscriberKey, s.EmailAddress, o.EventDate AS OpenDate
FROM _Subscribers s
INNER JOIN _Open o
ON s.SubscriberKey = o.SubscriberKey
WHERE o.EventDate > DATEADD(day, -30, GETDATE());
    
    2. Instructions CASE : Logique conditionnelle
Vous pouvez créer de nouvelles colonnes de manière dynamique en fonction de conditions. Par exemple, pour catégoriser les abonnés selon leur domaine de messagerie :
SELECT SubscriberKey, 
       EmailAddress,
       CASE 
           WHEN EmailAddress LIKE '%@gmail.com' THEN 'Gmail User'
           WHEN EmailAddress LIKE '%@yahoo.com' THEN 'Yahoo User'
           ELSE 'Other'
       END AS EmailCategory
FROM _Subscribers;
    
    3. Agrégations et regroupements
      Analysez vos données grâce à des fonctions comme COUNT, SUM ou
      AVG. Par exemple, pour compter les envois d’e-mails par domaine :
    
SELECT SUBSTRING(EmailAddress, CHARINDEX('@', EmailAddress) + 1, LEN(EmailAddress)) AS Domain,
       COUNT(*) AS TotalSends
FROM _Sent
GROUP BY SUBSTRING(EmailAddress, CHARINDEX('@', EmailAddress) + 1, LEN(EmailAddress))
ORDER BY TotalSends DESC;
    
    
    Surmonter les limites du SQL dans SFMC
- Optimisez les données sources : utilisez des filtres ou des paramètres de rétention pour limiter la taille des Data Extensions de départ.
 - Fractionnez les requêtes : divisez les requêtes complexes en parties plus petites et plus gérables.
 
Cas d’usage réel : Campagne de réengagement
Ciblez les abonnés qui :
- N’ont pas ouvert d’e-mail depuis plus de 90 jours.
 - Appartiennent au segment client « Premium ».
 
SELECT s.SubscriberKey, s.EmailAddress
FROM _Subscribers s
LEFT JOIN _Open o
ON s.SubscriberKey = o.SubscriberKey
WHERE s.Status = 'Active'
  AND s.SubscriberKey IN (SELECT SubscriberKey FROM PremiumCustomers)
  AND (o.EventDate IS NULL OR o.EventDate < DATEADD(day, -90, GETDATE()));
    
    
    L’instruction SELECT dans SFMC SQL
      L’instruction SELECT ouvre chaque requête dans Salesforce Marketing Cloud SQL.
      Elle permet de choisir les colonnes à extraire des Data Extensions et des Data Views,
      et autorise la création de nouvelles données.
    
Utilisation de base
      La version la plus simple est SELECT *, qui cible toutes les colonnes
      disponibles. Cependant, cela n’est pas recommandé, car cela réduit la lisibilité
      et peut affecter les performances :
    
SELECT *
FROM DataExtensionName;
    
    Au lieu de cela, ciblez explicitement les colonnes par leur nom :
SELECT
      ContactKey,
      EmailAddress
FROM DataExtensionName;
    
    Pour les noms de colonnes contenant des espaces ou des caractères spéciaux, utilisez des crochets :
SELECT
      ContactKey,
      EmailAddress,
      [External Contact Id]
FROM DataExtensionName;
    
    Aliasing avec AS
Utilisez le mot-clé AS pour renommer des colonnes ou ajouter des valeurs personnalisées :
SELECT
      ContactKey,
      EmailAddress,
      [External Contact Id] AS ExternalContactId,
      'Lead' AS RecordType,
      GETUTCDATE() AS ImportDate
FROM DataExtensionName;
    
    Concaténer des valeurs
Créez de nouvelles colonnes en combinant des données existantes, par exemple pour concaténer le prénom et le nom :
SELECT
      SubscriberKey,
      EmailAddress,
      FirstName + ' ' + LastName AS FullName
FROM DataExtensionName;
    
    Utiliser la clause TOP
Limitez le nombre de lignes renvoyées grâce à la clause TOP :
SELECT TOP 10
      SubscriberKey,
      PreferredChannel
FROM DataExtensionName;
    
    Pour un pourcentage de lignes, utilisez TOP PERCENT :
SELECT TOP 10 PERCENT
      SubscriberKey,
      QuizScore
FROM DataExtensionName
ORDER BY QuizScore DESC;
    
    WITH TIES
Incluez les lignes qui correspondent à la dernière valeur de la colonne triée :
SELECT TOP 3 WITH TIES
      SubscriberKey,
      QuizScore
FROM DataExtensionName
ORDER BY QuizScore DESC;
    
    DISTINCT pour éliminer les doublons
Utilisez DISTINCT pour récupérer des valeurs uniques :
SELECT DISTINCT
      Domain
FROM DataExtensionName
ORDER BY Domain;
    
    Bonnes pratiques
- Ciblez toujours explicitement les colonnes pour une meilleure lisibilité.
 - Utilisez des alias pour homogénéiser la sortie.
 - Combinez 
TOPavecORDER BYpour des résultats prévisibles. - Utilisez 
DISTINCTpour dédupliquer et nettoyer les données extraites. 
Base de la clause FROM dans SFMC SQL
      La seule instruction SELECT ne suffit pas. Une fois que vous avez identifié
      les données à extraire, vous devez préciser la table (Data Extension ou System Data View)
      FROM laquelle la requête ira récupérer ces colonnes.
    
SELECT
      ContactKey,
      EmailAddress
FROM MasterSubscriberDE;
    
    Si le nom de votre Data Extension contient des espaces ou des tirets, utilisez des crochets :
SELECT
      ContactKey,
      EmailAddress
FROM [Master-Subscriber DE];
    
    System Data Views
      Salesforce Marketing Cloud masque les System Data Views dans l’interface, mais vous pouvez
      les interroger directement pour récupérer des données de tracking ou techniques, comme les
      Email Sends, Opens, Bounces, etc. Utilisez un underscore (_) en préfixe :
    
SELECT
      JobID,
      EmailID,
      EmailName,
      EmailSubject,
      EmailSendDefinition,
      DeliveredTime
FROM _Job;
    
    Enterprise Data Extensions
Les Data Extensions partagées et synchronisées se situent au niveau de la Business Unit parente. Pour les interroger depuis la BU parente, utilisez la notation habituelle :
SELECT
      ContactKey,
      EmailAddress
FROM SharedDataExtension;
    
    Depuis une Business Unit enfant, utilisez le préfixe Ent. :
SELECT
      ContactKey,
      EmailAddress
FROM Ent.SharedDataExtension;
    
    Enterprise System Data Views
      En utilisant le préfixe Ent. avec les System Data Views, vous pouvez
      interroger toutes les données au niveau de la BU parente :
    
SELECT
      SubscriberKey,
      EmailAddress,
      DateJoined,
      DateUnsubscribed
FROM Ent._Subscribers;
    
    Interrogation héritée (Deprecated)
Autrefois, vous pouviez interroger les Data Extensions d’une BU enfant à partir de la BU parente en utilisant le MID de la BU enfant comme préfixe. Cette fonctionnalité est obsolète depuis 2020 :
SELECT
      ContactKey,
      EmailAddress
FROM 5123456.DataExtensionOnChildBU;
    
    La solution de contournement consiste à utiliser les Data Extensions partagées.
Bonnes pratiques
- Évitez d’interroger des Data Extensions dont la largeur cumulée des champs dépasse 4000 caractères pour maintenir les performances.
 - Utilisez le préfixe 
Ent.avec précaution pour accéder aux données entre Business Units. - Exploitez les Data Extensions partagées pour éviter les erreurs inattendues dans les automatisations.
 
SFMC SQL JOIN
      Data Extensions, System Data Views… Grâce à l’instruction JOIN, vous pouvez
      regrouper toutes les informations dans une seule requête. Toute la puissance du SQL
      réside dans la combinaison de plusieurs sources de données.
    
Exemple de requête
      Vérifiez qui a ouvert l’e-mail et quand, en interrogeant la System Data View _Open :
    
SELECT
      wel.SubscriberKey,
      wel.EmailAddress,
      o.EventDate AS OpenDate
FROM WelcomeCampaignSegment AS wel
    JOIN _Open AS o
        ON o.SubscriberKey = wel.SubscriberKey;
    
    Types de JOIN
Inner Join
Le INNER JOIN renvoie les enregistrements présents dans les deux tables :
SELECT
      wel.SubscriberKey,
      wel.EmailAddress,
      o.EventDate AS OpenDate
FROM WelcomeCampaignSegment AS wel
    INNER JOIN _Open AS o
        ON o.SubscriberKey = wel.SubscriberKey;
    
    Left et Right Joins
      LEFT JOIN inclut tous les enregistrements de la première table, et les résultats
      correspondants de la deuxième table :
    
SELECT
      wel.SubscriberKey,
      wel.EmailAddress,
      o.EventDate AS OpenDate
FROM WelcomeCampaignSegment AS wel
    LEFT JOIN _Open AS o
        ON o.SubscriberKey = wel.SubscriberKey;
    
    Utilisez WHERE avec IS NULL pour exclure :
SELECT
      wel.SubscriberKey,
      wel.EmailAddress
FROM WelcomeCampaignSegment AS wel
    LEFT JOIN _Open AS o
        ON o.SubscriberKey = wel.SubscriberKey
WHERE o.SubscriberKey IS NULL;
    
    Full Join
      Le FULL JOIN récupère tous les enregistrements des deux tables, en associant
      des valeurs NULL aux lignes non appariées :
    
SELECT
      wel.SubscriberKey,
      wel.EmailAddress,
      o.EventDate AS OpenDate
FROM WelcomeCampaignSegment AS wel
    FULL JOIN _Open AS o
        ON o.SubscriberKey = wel.SubscriberKey;
    
    Self-Join
Joignez une table à elle-même pour représenter des relations hiérarchiques :
SELECT
      c.CategoryName AS Category,
      pc.CategoryName AS ParentCategory
FROM WristwatchesDE AS c
    INNER JOIN WristwatchesDE AS pc
        ON pc.CategoryID = c.ParentCategoryID;
    
    Union
Concaténez les lignes issues de plusieurs requêtes :
SELECT
      jan.SubscriberKey,
      jan.EmailAddress
FROM JanuaryEventParticipants AS jan
UNION
SELECT
      feb.SubscriberKey,
      feb.EmailAddress
FROM FebruaryEventParticipants AS feb;
    
    Intersect
Récupérez uniquement les lignes existant dans les deux requêtes :
SELECT bf.SubscriberKey
FROM BlackFridayPromoSegment AS bf
INTERSECT
SELECT p.SubscriberKey
FROM PurchasesDataPoint AS p;
    
    Except
Récupérez les lignes existant uniquement dans la première requête :
SELECT bf.SubscriberKey
FROM BlackFridayPromoSegment AS bf
EXCEPT
SELECT p.SubscriberKey
FROM PurchasesDataPoint AS p;
    
    Bonnes pratiques
- Utilisez 
JOINde manière cohérente et claire pour une meilleure lisibilité. - Exploitez les alias pour raccourcir et clarifier vos requêtes.
 - Mélangez 
JOINetUNIONpour répondre à des exigences complexes. - Utilisez des diagrammes de Venn pour visualiser et déboguer des requêtes multi-join.
 
SFMC SQL WHERE
      Utilisez WHERE pour rendre votre requête plus précise. Avec SELECT
      et FROM, vous pouvez commencer à construire des requêtes, mais c’est avec
      WHERE que vous pourrez réellement filtrer les résultats.
    
Exemple simple
Filtrez les résultats selon des conditions :
SELECT
      SubscriberKey,
      EmailAddress
FROM _Subscribers
WHERE Domain = 'mateuszdabrowski.pl';
    
    Opérateurs de base
Quelques opérateurs courants :
- = : Égal à
 - != ou <> : Différent de
 - >, <, >=, <= : Opérateurs de comparaison
 
-- Exemple : Tous les abonnés qui ne sont pas en statut unsubscribed
SELECT
      SubscriberKey,
      EmailAddress
FROM _Subscribers
WHERE Status != 'unsubscribed';
    
    Opérateur LIKE
Utilisez LIKE avec des jokers pour filtrer les enregistrements selon des correspondances partielles :
-- Exemple : Tous les abonnés avec un abonnement "Phone"
SELECT
      SubscriberKey,
      EmailAddress
FROM MasterSubscriberDE
WHERE ActiveSubscription LIKE '%Phone%';
    
    Opérateurs logiques
Combinez vos conditions avec AND et OR :
-- Exemple : Abonnés avec un abonnement Phone ET qui sont dans leur 12e mois
SELECT
      SubscriberKey,
      EmailAddress
FROM MasterSubscriberDE
WHERE
    ActiveSubscription LIKE '%Phone%'
    AND CONVERT(DATE, SubscriptionStart) >= DATEADD(MONTH, -12, CONVERT(DATE, GETUTCDATE()))
    AND CONVERT(DATE, SubscriptionStart) < DATEADD(MONTH, -11, CONVERT(DATE, GETUTCDATE()));
    
    Raccourcis BETWEEN et IN
Utilisez BETWEEN pour les plages et IN pour plusieurs valeurs :
-- Exemple : Filtrer par plage de dates
SELECT
      SubscriberKey,
      EmailAddress
FROM MasterSubscriberDE
WHERE SubscriptionStart
      BETWEEN DATEADD(MONTH, -12, CONVERT(DATE, GETUTCDATE()))
      AND DATEADD(MONTH, -11, CONVERT(DATE, GETUTCDATE()));
-- Exemple : Filtrer par plusieurs statuts
SELECT
      SubscriberKey,
      EmailAddress
FROM _Subscribers
WHERE Status IN ('held', 'unsubscribed', 'bounced');
    
    Opérateur NOT
Excluez certains enregistrements à l’aide de NOT :
-- Exemple : Exclure certains statuts
SELECT
      SubscriberKey,
      EmailAddress
FROM _Subscribers
WHERE Status NOT IN ('held', 'unsubscribed', 'bounced');
    
    CASE dans WHERE
Utilisez CASE pour un filtrage conditionnel :
-- Exemple : Filtrer selon l’adresse e-mail préférée
SELECT
      SubscriberKey,
      EmailAddress
FROM MasterSubscriberDE
WHERE
    EmailAddress != CASE
        WHEN PreferredEmail = 'Personal Email' THEN PersonalEmail
        WHEN PreferredEmail = 'Work Email' THEN WorkEmail
    END;
    
    Bonnes pratiques
- Utilisez 
INpour plusieurs valeurs plutôt que de multiplesOR. - Optimisez les plages de dates avec 
BETWEEN, en faisant attention au formatage. - Combinez 
ANDetORavec des parenthèses pour plus de clarté. 
Instruction SFMC SQL CASE
      L’instruction CASE en SQL vous permet d’évaluer plusieurs conditions et de
      renvoyer différents résultats. Elle est idéale pour reformater les données, les standardiser
      et créer des sorties dynamiques dans Salesforce Marketing Cloud (SFMC).
    
Exemple de base
Traduire des niveaux d’adhésion :
SELECT
      ContactKey,
      EmailAddress,
      CASE MemberType__c
        WHEN 1 THEN 'Bronze'
        WHEN 2 THEN 'Silver'
        WHEN 3 THEN 'Gold'
        WHEN 4 THEN 'Platinum'
        ELSE 'Unregistered'
      END AS MemberType
FROM MembersDE;
    
    Dans cet exemple :
- WHEN : Spécifie la condition à vérifier.
 - THEN : Retourne la valeur si la condition est vraie.
 - ELSE : (Optionnel) Valeur par défaut si aucune condition n’est remplie.
 
Search CASE
Créez des conditions dynamiques avec Search CASE :
SELECT
      ContactKey,
      EmailAddress,
      CASE
        WHEN IsAppInstalled = 1 THEN 'Push'
        WHEN EmailOptIn = 1 AND EmailAddress IS NOT NULL THEN 'Email'
        WHEN PhoneOptIn = 1 AND Mobile IS NOT NULL THEN 'Phone'
      END AS PreferredChannel
FROM ContactsDE;
    
    CASE imbriqué
Vous pouvez imbriquer des CASE pour une logique plus complexe :
SELECT
      ContactKey,
      CASE
        WHEN MemberType = 'Platinum' THEN 'Key Account Manager'
        WHEN MemberType IN ('Gold', 'Silver') THEN
            CASE
              WHEN IsAppInstalled = 1 THEN 'Push'
              WHEN EmailOptIn = 1 AND EmailAddress IS NOT NULL THEN 'Email'
            END
        WHEN MemberType = 'Bronze' THEN
            CASE
              WHEN IsAppInstalled = 1 THEN 'Push'
              WHEN EmailOptIn = 1 AND EmailAddress IS NOT NULL THEN 'Email'
            END
      END AS PreferredChannel
FROM MembersDE;
    
    LIKE dans un CASE
Utilisez LIKE dans un CASE pour des conditions basées sur du texte :
SELECT
      ContactKey,
      CASE
        WHEN EmailAddress LIKE '%@company.com' THEN 'Internal'
        ELSE 'External'
      END AS ContactType
FROM _Subscribers;
    
    Raccourci IIF
Pour des conditions simples, utilisez IIF :
SELECT
      SubscriberKey,
      IIF(Status = 'active', 'TRUE', 'FALSE') AS Sendable
FROM _Subscribers;
    
    Valeurs dynamiques dans CASE
Exploitez des colonnes de manière dynamique avec CASE ou IIF :
SELECT
      SubscriberKey,
      IIF(PreferredChannel = 'Email', EmailAddress, MobileNumber) AS PointOfContact
FROM MasterDE;
    
    Bonnes pratiques
- Utilisez 
CASEpour la logique complexe multi-conditions. - Privilégiez 
IIFpour des conditions simples et une meilleure lisibilité. - Hiérarchisez les conditions 
CASEdans l’ordre de priorité. - Exploitez les 
CASEimbriqués pour des logiques à plusieurs niveaux. 
SFMC SQL LIKE
      L’opérateur LIKE vous permet d’utiliser des jokers et des groupes pour filtrer
      des enregistrements basés sur des fragments de valeur. Il est très utilisé à la fois dans
      les instructions SELECT et WHERE.
    
Utilisation de base
Faites correspondre les domaines e-mail en utilisant des jokers :
SELECT
      SubscriberKey,
      EmailAddress
FROM _Subscribers
WHERE EmailAddress LIKE '%@mateuszdabrowski.pl';
    
    Cette requête récupère toutes les adresses e-mail se terminant par @mateuszdabrowski.pl.
Jokers
- % : Correspond à zéro, un ou plusieurs caractères.
 - _ : Correspond exactement à un caractère.
 
Exemple avec _ :
SELECT
      SubscriberKey,
      EmailAddress,
      RecommendedProducts
FROM EcommerceUpsellDE
WHERE RecommendedProducts LIKE '_'
  OR RecommendedProducts LIKE '_,%'
  OR RecommendedProducts LIKE '%,_,%'
  OR RecommendedProducts LIKE '%,_';
    
    Opérateur de groupe
      L’opérateur [] permet de faire correspondre n’importe quel caractère figurant
      à l’intérieur du groupe. Exemple :
    
SELECT
      SubscriberKey,
      EmailAddress,
      RecommendedProducts
FROM EcommerceUpsellDE
WHERE RecommendedProducts LIKE '[1234]'
  OR RecommendedProducts LIKE '[1234],%'
  OR RecommendedProducts LIKE '%,[1234],%'
  OR RecommendedProducts LIKE '%,[1234]';
    
    Opérateur de plage
Utilisez - pour définir des plages :
SELECT
      SubscriberKey,
      EmailAddress,
      RecommendedProducts
FROM EcommerceUpsellDE
WHERE RecommendedProducts LIKE '[1-4]'
  OR RecommendedProducts LIKE '[1-4],%'
  OR RecommendedProducts LIKE '%,[1-4],%'
  OR RecommendedProducts LIKE '%,[1-4]';
    
    Opérateur d’exclusion
Excluez certains caractères en utilisant ^ :
SELECT
      SubscriberKey
FROM _Subscribers
WHERE SubscriberKey LIKE '%[^a-zA-Z0-9]%'
  AND LEN(SubscriberKey) != 18;
    
    NOT LIKE
Filtrez les enregistrements qui ne correspondent pas à un modèle :
SELECT
      ContactKey,
      CASE
        WHEN EmailAddress NOT LIKE '%@mateuszdabrowski.pl' THEN 'External'
        ELSE 'Internal'
      END AS ContactType
FROM _Subscribers;
    
    
    Fonctions de date SFMC SQL
Maîtrisez les dates avec les fonctions SQL intégrées. Ces fonctions sont indispensables pour manipuler et formater les dates dans Salesforce Marketing Cloud (SFMC).
GETDATE & GETUTCDATE
Obtenez l’horodatage actuel :
SELECT GETDATE() AS CurrentDate;
Pour l’horodatage UTC :
SELECT GETUTCDATE() AS CurrentUTCDate;
DATEPART
Extrait une partie spécifique d’une date :
SELECT
      SubscriberKey,
      EmailAddress
FROM Ent._Subscribers
WHERE DATEPART(YEAR, DateJoined) = 2020;
    
    Exemple de raccourci :
SELECT
      SubscriberKey,
      EmailAddress
FROM Ent._Subscribers
WHERE YEAR(DateJoined) = 2020;
    
    DATENAME
Extrait le nom d’une partie d’une date :
SELECT
      SubscriberKey,
      DATENAME(WEEKDAY, DateJoined) AS DayJoined
FROM Ent._Subscribers;
    
    DATEADD
Ajoutez ou soustrayez un intervalle à une date :
SELECT
      GETUTCDATE() AS TrialStartDate,
      DATEADD(DAY, 7, GETUTCDATE()) AS TrialEndDate;
    
    Exemple avec des plages :
SELECT
      SubscriberKey,
      EmailAddress
FROM EventRegistration
WHERE EventDate BETWEEN GETDATE() AND DATEADD(MONTH, 1, GETDATE());
    
    DATEDIFF
Calcule la différence entre deux dates :
SELECT
      SubscriberKey,
      DATEDIFF(DAY, DateJoined, GETDATE()) AS SubscriptionTime
FROM Ent._Subscribers;
    
    AT TIME ZONE
Ajoutez ou modifiez les informations de fuseau horaire :
SELECT
      CONVERT(DATETIME2(0), '2020-01-01T18:00:00') AT TIME ZONE 'Central Standard Time' AS CST,
      CONVERT(DATETIME2(0), '2020-07-01T18:00:00') AT TIME ZONE 'Central Standard Time' AS CDT;
    
    FORMAT
Formatez les dates pour la personnalisation ou l’export :
SELECT
      FORMAT(CONVERT(DATE, '10/30/2020'), 'd', 'en-GB') AS DateOrderedProperly,
      FORMAT(GETUTCDATE(), 'dd/MM/yyyy') AS TodayCustomFormat,
      FORMAT(DateJoined, 'D', 'de-DE') AS DateExpandedIndian;
    
    
    Fonctions numériques SFMC SQL
Prenez le contrôle des nombres grâce aux fonctions SQL intégrées. Elles sont indispensables pour manipuler et formater les valeurs numériques dans Salesforce Marketing Cloud (SFMC).
MIN et MAX
Trouvez la valeur minimum et maximum :
SELECT MAX(s.BounceCount) AS HighestBounceCount
FROM _Subscribers AS s;
    
    Cas d’utilisation pour trouver les gagnants d’un concours :
SELECT
      comp.SubscriberKey,
      comp.CompetitionPoints
FROM CompetitionDataExtension AS comp
WHERE
    comp.CompetitionPoints = (
        SELECT MAX(comp2.CompetitionPoints)
        FROM CompetitionDataExtension AS comp2
    );
    
    Déboguez les Data Extensions avec MAX :
SELECT
      MAX(LEN(c.Id)) AS SubscriberKey,
      MAX(LEN(c.Email)) AS EmailAddress
FROM Contact_Salesforce AS c;
    
    AVG
Calculez la valeur moyenne :
SELECT AVG(s.BounceCount) AS AverageBounceCount
FROM _Subscribers AS s;
    
    Exemple pour trouver l’âge moyen des abonnés (idée) :
SELECT DATEDIFF(MONTH, CONVERT(DATETIME, AVG(CONVERT(FLOAT, DateJoined))), GETDATE()) AS SubscribersAverageAgeInMonths
FROM _Subscribers;
    
    SUM
Calculez la somme des valeurs :
SELECT SUM(BounceCount) AS AllBouncesCount
FROM _Subscribers;
    
    FORMAT avec les nombres
Formatez des valeurs numériques :
SELECT
      FORMAT(1234.56, 'N') AS WithoutCustomPrecision,
      FORMAT(1234.56, 'N1') AS RoundedWithCustomPrecision;
    
    Exemple de formatage personnalisé :
SELECT
      FORMAT(CONVERT(BIGINT, ea.MobileNumber), '(###) ### ### ###') AS FormattedPhone
FROM _Subscribers AS s
    INNER JOIN EnterpriseAttribute AS ea
        ON ea._SubscriberID = s.SubscriberID;
    
    Un autre exemple de formatage personnalisé :
SELECT
      FORMAT(VIPDiscount, 'P') AS StandardFormattedVIPDiscount,
      FORMAT(VIPDiscount, '-00.##%') AS CustomFormattedVIPDiscount
FROM SomeDataExtension;
    
    
    Fonctions de conversion SFMC SQL
Brisez les limites des types de données sources. Utilisez les fonctions de conversion SQL pour transformer vos valeurs dans Salesforce Marketing Cloud.
CAST & CONVERT
CAST
Syntaxe de base pour la conversion de type :
SELECT SubscriberKey
FROM Ent._Subscribers
WHERE DateJoined > CAST('2020-10-30' AS DATE);
    
    CONVERT
Similaire à CAST, avec des fonctionnalités supplémentaires :
SELECT SubscriberKey
FROM Ent._Subscribers
WHERE DateJoined > CONVERT(DATE, '2020-10-30');
    
    Ajout de codes de style pour des formats non standard :
SELECT SubscriberKey
FROM _Subscribers
WHERE DateJoined > CONVERT(DATE, '30/10/2019', 103);
    
    Formatage de dates avec CONVERT
Exemples de sortie formatée :
SELECT
      CONVERT(NVARCHAR, GETDATE(), 101) AS DateFormat1, /* Output: 10/30/2020 */
      CONVERT(NVARCHAR, GETDATE(), 107) AS DateFormat2  /* Output: Oct 30, 2020 */
    Types de données
Types de données couramment utilisés dans Salesforce Marketing Cloud :
- NVARCHAR : Le meilleur choix pour les chaînes de caractères
 - DECIMAL : Idéal pour les nombres décimaux précis
 - INT : À utiliser pour les entiers
 - DATETIME2 : Pour les formats de date et heure modernes
 - DATE : Pour les valeurs de date uniquement
 
Exemple pour spécifier la précision et l’échelle :
SELECT
      CONVERT(DECIMAL(5, 2), '123.99') AS FullConversion; /* Output: 123.99 */
    
    Codes de style CONVERT Date
Codes de style de date populaires :
- 101 : MM/dd/yyyy
 - 103 : dd/MM/yyyy
 - 107 : MMM dd, yyyy
 - 120 : yyyy-MM-dd HH:mm:ss
 
Utilisation des codes de style dans les requêtes :
SELECT
      CONVERT(NVARCHAR, GETDATE(), 101) AS DateAsString,
      CONVERT(DATETIME2, '2020-12-31 19:00:00', 120) AS StringAsDate;
    
    Gérer les formats non pris en charge
Si un format de date n’est pas directement pris en charge :
SELECT
      CONVERT(DATETIME, LEFT('27/12/2021 07:31:01', 10), 103) +
      CONVERT(DATETIME, RIGHT('27/12/2021 07:31:01', 8), 108) AS ConvertedDate;
    
  