通过 AmpScript 合并来自多行的 1 个字段
Combine 1 field from multiple rows via AmpScript
我有一个包含行和列的数据扩展,例如:
emailAddress orderNumber firstName lastName customerOrder
cust1@gmail.com 1111 Bill Adams 2 brown shoes
cust1@gmail.com 1111 Bill Adams 2 green socks
cust1@gmail.com 1111 Bill Adams 1 orange backpack
cust1@gmail.com 2222 Bill Adams 2 pink gloves
cust2@gmail.com 3333 David Sherwood 5 yellow hats
我想做的是根据这些数据创建一个订单接收电子邮件,最好不要从源头改变它。因此,理想情况下,电子邮件输出会根据 orderNumber 对每个客户的 customerOrder 进行分组。然后将 customerOrder 连接起来并插入到电子邮件中(注意上面的内容已经简化了很多,customerOrder 实际上是 HTML 用于插入到电子邮件中的 HTML table 中)。
到目前为止,我已经取得了非常基本的进展:
%%[
Set @customerOrder =
LookupOrderedRows("transactionsList",
"0",
"customerOrder",
"orderNumber",
"1111")
]%%
通过这段代码,我可以看到订单号 1111 有 3 个条目。但现在我卡住了。我需要创建一个 if/then 循环吗?或者有什么方法可以从 LookupOrderedRows 函数中获取输出并解析它以便在电子邮件中的 HTML table 中使用?
使用我博客上的 lookup examples 之一,您可以执行如下操作:
%%[
var @rows, @row, @rowCount, @numRowsToReturn, @emailAddress, @i, @prevOrderNumber
set @emailAddress = AttributeValue("emailaddr")
set @numRowsToReturn = 0 /* 0 means all */
set @rows = LookupOrderedRows("transactionsList", @numRowsToReturn, "orderNumber", "emailAddress", @emailAddress)
set @rowCount = rowcount(@rows)
if @rowCount > 0 then
set @prevOrderNumber = ""
for @i = 1 to @rowCount do
var @orderNumber, @firstName, @lastName, @customerOrder
set @row = row(@rows,@i) /* get row based on loop counter */
set @orderNumber = field(@row,"orderNumber")
set @firstName = field(@row,"firstName")
set @lastName = field(@row,"lastName")
set @customerOrder = field(@row,"customerOrder")
/* output headings for first order or when order # changes */
if empty(@prevOrderNumber) or @prevOrderNumber != @orderNumber then
outputline(concat("<br>Order #:", @orderNumber))
outputline(concat("<br>Name: ", @firstName, " ", @lastName))
outputline(concat("<br>Line items:<br>"))
set @prevOrderNumber = @orderNumber
endif
outputline(concat("<br>",@customerOrder))
next @i
else
outputline(concat("<br>No transactionsList rows found"))
endif
]%%
我有一个包含行和列的数据扩展,例如:
emailAddress orderNumber firstName lastName customerOrder
cust1@gmail.com 1111 Bill Adams 2 brown shoes
cust1@gmail.com 1111 Bill Adams 2 green socks
cust1@gmail.com 1111 Bill Adams 1 orange backpack
cust1@gmail.com 2222 Bill Adams 2 pink gloves
cust2@gmail.com 3333 David Sherwood 5 yellow hats
我想做的是根据这些数据创建一个订单接收电子邮件,最好不要从源头改变它。因此,理想情况下,电子邮件输出会根据 orderNumber 对每个客户的 customerOrder 进行分组。然后将 customerOrder 连接起来并插入到电子邮件中(注意上面的内容已经简化了很多,customerOrder 实际上是 HTML 用于插入到电子邮件中的 HTML table 中)。
到目前为止,我已经取得了非常基本的进展:
%%[
Set @customerOrder =
LookupOrderedRows("transactionsList",
"0",
"customerOrder",
"orderNumber",
"1111")
]%%
通过这段代码,我可以看到订单号 1111 有 3 个条目。但现在我卡住了。我需要创建一个 if/then 循环吗?或者有什么方法可以从 LookupOrderedRows 函数中获取输出并解析它以便在电子邮件中的 HTML table 中使用?
使用我博客上的 lookup examples 之一,您可以执行如下操作:
%%[
var @rows, @row, @rowCount, @numRowsToReturn, @emailAddress, @i, @prevOrderNumber
set @emailAddress = AttributeValue("emailaddr")
set @numRowsToReturn = 0 /* 0 means all */
set @rows = LookupOrderedRows("transactionsList", @numRowsToReturn, "orderNumber", "emailAddress", @emailAddress)
set @rowCount = rowcount(@rows)
if @rowCount > 0 then
set @prevOrderNumber = ""
for @i = 1 to @rowCount do
var @orderNumber, @firstName, @lastName, @customerOrder
set @row = row(@rows,@i) /* get row based on loop counter */
set @orderNumber = field(@row,"orderNumber")
set @firstName = field(@row,"firstName")
set @lastName = field(@row,"lastName")
set @customerOrder = field(@row,"customerOrder")
/* output headings for first order or when order # changes */
if empty(@prevOrderNumber) or @prevOrderNumber != @orderNumber then
outputline(concat("<br>Order #:", @orderNumber))
outputline(concat("<br>Name: ", @firstName, " ", @lastName))
outputline(concat("<br>Line items:<br>"))
set @prevOrderNumber = @orderNumber
endif
outputline(concat("<br>",@customerOrder))
next @i
else
outputline(concat("<br>No transactionsList rows found"))
endif
]%%