我应该根据其他文件对巨大的CSV文件进行一些更改。因此,我选择在SQL中进行此操作,但经过进一步考虑后,我不确定如何继续进行操作。
在第一张表中,我有一份合同清单。列代表合同所属的某些细分市场以及可以链接到合同的某些产品(下表中的示例)。 这里合同号1234属于段X1和Y2。没有链接到的产品编号1,但是有链接到产品编号2的产品。该产品的原产于2030年1月1日结束。
cont_n|date|segment_1|segment_2|..|prod_1|date_prod_1|product_2|date_product_2|..
1234 |3011| X1 | Y2 |..| | |YES |01/01/2030 |..
第二个文件是段组合的列表,并指示应如何调整“日期”列。该示例显示了以下情况-如果存在与属于组X1和Y2的合同链接的prod_2,则在今年结束prod_2。我需要此结果来更改表号。 1.
prod_no|segment_1|segment_2|result
prod_2 | X1 | Y2 | end the product on anniversary
Ergo,我需要得到结果:
cont_n|date|segment_1|segment_2|..|prod_1|date_prod_1|product_2|date_product_2|..
1234 |3011| X1 | Y2 |..| | |YES |30/11/2019 |..
在原始文件中,表1中有大约60万行和300列(意味着大约有100种不同的产品),表2中有800种可能的段组合。
我需要实现的算法(通常):
for x=1 to 100
IF product_x = YES THEN date_product_x = date + "Seach for result in table2"
是否有合理的方法基于第二张表更改“ date_product_x”列,还是找到其他解决方案更好?
非常感谢!
答案 0 :(得分:0)
我只能为您提供一般性的方法,因为您问题中的信息是一般性的(例如,为什么“在周年纪念日结束产品”转换为“ 30/11/2019”?问题中未作解释,所以我认为您将能够处理逻辑的那一部分。
您可以通过在表1上使用UNPIVOT来获得如下结构:
cont_n | segment1 | segment2 | product_number | product_date
您将通过date_product_1
到date_product_100
进行UNPIVOT..FOR。您要么必须输入所有100个列名,要么使用动态sql来构建整个列表。
您将进行一些字符串操作以获取“ date_product_x”的“ x”部分,并将其转换为“ prod_x”,然后可以在两个segment
列和“ prod_x”列,获取result
列的值,并执行您要执行的任何规则以获取date_product_x
所需的值。
最后,您得到该结果,并将其PIVOT返回到每合同单行形式,然后将其联接到原始表中以更新date_product_x
列。