2

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

我有一个名为 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 Cloud 中运行?

4

3 回答 3

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 条件加入表一次,然后只查看您需要的列。当然,这个想法也有局限性。

于 2017-02-27T15:45:38.430 回答
0

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

SELECT * FROM Items_DE
WHERE Price < (SELECT Value FROM Parameters_DE WHERE Name='LIMIT')
于 2017-02-27T15:28:09.323 回答
0

这可以通过加入来完成

SELECT i.* 
FROM Items_DE i
INNER JOIN Parameters_DE p 
 ON p.Name = 'LIMIT'
AND p.Price > i.Value
于 2017-02-27T16:34:18.727 回答