2017-02-27 5 views
2

Salesforce Marketing-Cloud-Abfragen Variablen oder temporäre Tabellen nach nicht dem „SQL Support“ Abschnitt dieser offiziellen Dokumentation ermöglichen (http://help.marketingcloud.com/en/documentation/exacttarget/interactions/activities/query_activity/)Abfrage Variablentabelle ohne Speicher Variablen

Ich habe eine Datenerweiterung namens Parameters_DE mit Feldern Namen und Wert, der konstante Werte speichert. Ich muss auf dieses DE in Abfragen verweisen.

mithilfe von Transact-SQL, ein Beispiel ist:

Declare @number INT 
SET @number = (SELECT Value FROM Parameters_DE WHERE Name='LIMIT') 
SELECT * FROM Items_DE 
WHERE Price < @number 

Wie kann die oben ohne Variablen oder temporäre Tabellen durchgeführt werden, so dass ich auf den Wert des ‚LIMIT‘ Variable verweisen, die in Parameters_DE gespeichert und damit die Abfrage in Marketing Cloud funktioniert?

+0

Wert kann null oder mehr zurückkehren erfolgen, so ist INT ein schlechter Typ – Paparazzi

+2

Sie werden viel mehr Augen auf SFMC Fragen über an [salesforce.stackexchange.com bekommen ] (http://salesforce.stackexchange.com), speziell mit der [marketing-cloud] (http://salesforce.stackexchange.com/questions/tagged/marketing-cloud) und [query] (http: // salesforce.support) .stackexchange.com/questions/tagged/query) Tags. –

+0

@AdamSpriggs Danke für den Tipp, ich werde alle zukünftigen Fragen dorthin verschieben. –

Antwort

3

Das ist, was ich ohnehin getan haben, auch wenn Variablen erlaubt:

SELECT i.* 
FROM Items_DE i 
INNER JOIN Parameters_DE p ON p.Name = 'LIMIT' 
WHERE i.Price < p.Value 

Wünschend Eine Verwendung einer Variablen ist indikativ für das noch denkende prozedurale anstelle von set-based. Beachten Sie, dass Sie bei Bedarf mehr als einmal der Tabelle "Parameters_DE" beitreten können (geben Sie jedesmal einen Unterschiedsalias ein), um die Werte verschiedener Parameter an verschiedenen Teilen einer Abfrage zu verwenden.

Sie können auch die Effizienz dieser Art von Abfrage erhöhen, indem Sie eine Parametertabelle mit einer Zeile und eine Spalte für jeden benötigten Wert erstellen. Dann können Sie sich einmal mit einer 1 = 1-Bedingung an die Tabelle VERBINDEN und nur die Spalten ansehen, die Sie benötigen. Natürlich hat diese Idee auch Grenzen.

0

Sie könnten nur die SELECT verwenden, die die Nummer in Ihrer WHERE Klausel ruft:

SELECT * FROM Items_DE 
WHERE Price < (SELECT Value FROM Parameters_DE WHERE Name='LIMIT') 
0

Dies kann mit einem Join

SELECT i.* 
FROM Items_DE i 
INNER JOIN Parameters_DE p 
ON p.Name = 'LIMIT' 
AND p.Price > i.Value 
+0

Bitte erläutern Sie die Antwort –

+0

Anders als 'WHERE' vs' AND', wie unterscheidet sich das von meiner Antwort, die in fast einer Stunde früher kam? –

+0

@JoelCoehoorn Nichts. Was ist dein Problem? – Paparazzi