查询变量 Table 而不存储变量

Query Variable Table without storing variables

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

我有一个名为 Parameters_DE 的数据扩展,其中包含存储常量值的字段名称和值。我需要在查询中参考这个 DE。

使用transact-SQL,一个例子是:

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

如何在没有变量或临时表的情况下完成上述操作,以便我可以引用存储在 Parameters_DE 中的 'LIMIT' 变量的值,以便查询将在 Marketing 中运行云?

您可以只使用 SELECT 检索 WHERE 子句中的号码:

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

这是我无论如何都会做的,即使允许变量:

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

想要使用变量表明仍在思考程序,而不是基于集合。请注意,如果需要,可以多次加入Parameters_DE table(每次给一个不同的别名)以在查询的不同部分使用不同参数的值。

您还可以让参数 table 包含一行,并为您需要的每个值设置一列,从而提高此类查询的效率。然后,您可以使用 1=1 条件加入 table 一次,然后只查看您需要的列。当然,这个想法也有局限性。

这可以通过连接来完成

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