SQL avec Salesforce Marketing Cloud

Développer des compétences clés pour une stratégie marketing digital éfficace sur Salesforce Marketing Cloud

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

AutoKill Limit : les requêtes qui s’exécutent plus de 30 minutes sont automatiquement interrompues. Pour éviter cela :
  • 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 TOP avec ORDER BY pour des résultats prévisibles.
  • Utilisez DISTINCT pour 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 JOIN de manière cohérente et claire pour une meilleure lisibilité.
  • Exploitez les alias pour raccourcir et clarifier vos requêtes.
  • Mélangez JOIN et UNION pour 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 IN pour plusieurs valeurs plutôt que de multiples OR.
  • Optimisez les plages de dates avec BETWEEN, en faisant attention au formatage.
  • Combinez AND et OR avec 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 CASE pour la logique complexe multi-conditions.
  • Privilégiez IIF pour des conditions simples et une meilleure lisibilité.
  • Hiérarchisez les conditions CASE dans l’ordre de priorité.
  • Exploitez les CASE imbriqué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;