查询变量表而不存储变量

时间:2017-02-27 15:18:43

标签: sql sql-server tsql salesforce exacttarget

Salesforce Marketing Cloud查询根据" SQL支持"不允许变量或临时表。本官方文档的一部分(http://help.marketingcloud.com/en/documentation/exacttarget/interactions/activities/query_activity/

我有一个名为Parameters_DE的数据扩展,其中包含存储常量值的字段Name和Value。我需要在查询中引用此DE。

使用transact-SQL,例如:

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

如何在没有变量或临时表的情况下完成上述操作,以便我可以参考&#39; LIMIT&#39;存储在Parameters_DE中的变量,以便查询可以在Marketing Cloud中使用吗?

3 个答案:

答案 0 :(得分:3)

即使允许变量,这也是我本来会做的:

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

想要使用变量表示仍在思考程序,而不是基于集合。请注意,如果需要,可以多次连接到Parameters_DE表(每次都给出差异别名),以便在查询的不同部分使用不同参数的值。

通过使用包含一行的参数表以及所需的每个值的列,您还可以使此类查询的效率更高。然后,您可以使用1 = 1条件一次加入表格,并查看所需的列。当然,这个想法也有局限性。

答案 1 :(得分:0)

您可以使用SELECT检索WHERE子句中的数字:

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

答案 2 :(得分:0)

这可以通过连接

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