我需要建立逻辑,以便根据相关的先前版本用新产品名称替换所有旧产品名称。 这是数据和表格的样子。我有三列分别名为product_name,Intro_date和previous_product_name。
当前表:
product_name | Intro_date | previous_product_name ------------------------------------------------- PRO01 6/1/2016 PRO02 6/15/2016 PRO03 6/15/2016 PRO02 PRO04 6/15/2016 PRO01 PRO05 8/1/2016 PRO06 9/1/2016 PRO04 PRO07 9/1/2016 PRO05 PRO08 10/15/2016 PRO06 PRO09 10/15/2016 PRO07
现在,我想创建新的列名“ product_name_mapping”,并且需要像下面的输出一样填充数据值。
示例:如果您查看PRO09的先前产品名称是PRO07。就像同一PRO07的先前产品名称是PRO05…一样。
映射如下:PRO05> PRO07> PRO09
现在,我要用新产品名称值PRO09替换所有以前的产品名称值PRO05,PRO07。
类似于PRO08:PRO01> PRO04> PRO06> PRO08
我要用PRO08替换所有以前的产品名称(PRO01> PRO04> PRO06)。
这就是我要寻找的最终结果。
结果表:
product_name | Intro_date | previous_product_name | product_name_mapping ------------------------------------------------------------------------ *PRO01 6/1/2016 PRO08 PRO02 6/15/2016 PRO03 PRO03 6/15/2016 PRO02 PRO03 PRO04 6/15/2016 PRO01 PRO08 PRO05 8/1/2016 PRO09 PRO06 9/1/2016 PRO04 PRO08 PRO07 9/1/2016 PRO05 PRO09 PRO08 10/15/2016 PRO06 PRO08 PRO09 10/15/2016 PRO07 PRO09
我尝试了构建逻辑,但是没有运气。我需要在AWS Redshift数据库中构建此SQL。 谁能帮我解决这个问题?
答案 0 :(得分:0)
您将需要创建一个带有一段时间的函数来遍历并获取当前项。然后,您可以在查询中使用该函数。我使用SQL Server,但也许您可以将其转换为AWS Redshift。
功能
CREATE FUNCTION [guest].[get_mapping]( @product_name AS Varchar(256) )
RETURNS Varchar(256)
AS BEGIN
while (@@rowcount > 0)
BEGIN
select @product_name = product_name from <YourTable> where previous_product_name = @product_name;
END
RETURN @product_name;
END
选择语句:
select *, get_mapping(product_name) as product_name_mapping from <yourtable>