所以我在Teradata试图提取任何具有1个以上颜色相关名称的产品,如下面的代码片段所示:
SELECT
pt.product_number,
COUNT (CASE WHEN ot.option_name like any ('%green%', '%red%', '%blue%') THEN 1 ELSE NULL END) as differentColorCount
FROM product_table pt
JOIN option_table ot on ot.product_num = pt.product_num
HAVING differentColorCount > 1
GROUP BY 1
运行正常,但我意识到的问题是产品可能有一百个不同的“红色”选项。 (Red-1,Red-2,Red-3等)。但我只想知道单个产品存在两个的不同颜色字符串。
所以我真正需要的是 LIKE ANY ,而不是 LIKE ANY 。如果两者红色和绿色,则计数1.如果两者蓝色和紫色,则计数为1.
我意识到我可以做一个非常长的列表,在每个可能的组合中我会做几十个 LIKE ALL ,但是如果我需要检查它,它似乎不会很好地扩展说100种不同的颜色而不是6?
如果有人对此有任何见解,我将非常感激。提前感谢您提供的任何帮助! :)
答案 0 :(得分:0)
您可以使用正则表达式提取颜色,然后应用不同的计数:
Count (DISTINCT RegExp_Substr(option_name, '(green|red|blue)')) AS differentColorCount
这类似于like any ('%green%', '%red%', '%blue%')
,但返回实际的匹配颜色而不是TRUE / FALSE。
'(green|red|blue)'
搜索模式分隔定义了三个备选搜索字符串并返回第一个匹配。