【发布时间】:2017-11-02 04:48:32
【问题描述】:
所以我在 Teradata 中试图提取任何具有超过 1 个颜色相关名称的产品,如这里的代码 sn-p 所示:
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
这运行良好,但我意识到的问题是,一个产品可能有一百个不同的“红色”选项,例如。 (红 1、红 2、红 3 等)。但我只想计算单个产品何时出现两个不同的颜色字符串。
所以我真正需要的是 LIKE ANY,而不是 LIKE ANY。如果 both Red AND Green 都存在,则计 1。如果 both Blue AND Purple 都存在,则计 1。
我意识到我可以做一个很长的列表,我可以在每个可能的组合中做几十个 LIKE ALL,但如果我需要检查它似乎不能很好地扩展,说 100 种不同的颜色而不是 6 种?
如果有人对此有任何见解,我将不胜感激。提前感谢您提供的任何帮助! :)
【问题讨论】:
-
你不应该在一个字符串中存储多个选项。
-
您的数据库是什么样的?在 Gordon 看来,您是否将所有值都存储在一个字段中?
-
如果 gordon 建议您在
option_name中存储多个值,则需要将该字符串转换为多行 stackoverflow.com/questions/29105836/… -
不,选项在另一个表中进行了细分,我只是删除了一些 JOIN 混乱以尝试使问题更清晰一些。基本上,我会在拆分表中检查每种产品的多种颜色的选项名称。
-
我在问题末尾粘贴了一个更完整的版本,其中包含 JOIN 表。谢谢!