我试图在一列中根据特定的单词将一组项目分组。例子:在“物品”栏我有:羊毛红毛衣,羊毛蓝色裤子,皮革黑色鞋,皮革棕色裤子。
我需要将这些物品分为两类,“羊毛物品”和“皮革物品”。我需要同时分类几个项目。我想我需要regexp来提取这个特定的单词,但是我不知道如何使用它。我编写的查询也返回空值,尽管我使用的是NOTNULL +,其中包含项目既不是羊毛也不是皮革的行。
SELECT
DISTINCT item,
CASE WHEN item LIKE '%wool%'
AND NULLIF(item,'NULL') IS NOT NULL
THEN
1
END AS woolitems,
CASE WHEN item LIKE '%leather%'
AND NULLIF(item,'NULL') IS NOT NULL
THEN
1
END AS leatheritems,
FROM table我需要帮助,了解如何创建一个大类别,以及如何只有行,其中的单词我正在寻找返回。(谢谢你的帮助:)
发布于 2022-02-15 15:14:54
考虑以下方法
select item,
regexp_extract(item, 'wool|leather') category
from your_table 如果应用于你问题中的数据样本
with your_table as (
select 'wool red sweater' item union all
select 'wool blue trousers' union all
select 'leather black shoes' union all
select 'leather brown pants'
) 输出是

发布于 2022-02-15 15:21:40
如果出于某种原因,您希望使用原始查询作为起点--只需将其用un透视结束,如下面的示例所示
select item, category from (
SELECT
DISTINCT item,
CASE
WHEN item LIKE '%wool%' AND NULLIF(item,'NULL') IS NOT NULL
THEN 1
END AS woolitems,
CASE
WHEN item LIKE '%leather%' AND NULLIF(item,'NULL') IS NOT NULL
THEN 1
END AS leatheritems,
FROM your_table
)
unpivot (value for category in (woolitems, leatheritems)) 带输出

发布于 2022-02-15 15:10:05
听起来你好像在找
SELECT
DISTINCT item,
CASE WHEN item LIKE '%wool%'
AND NULLIF(item,'NULL') IS NOT NULL THEN 'wool item'
WHEN item LIKE '%leather%'
AND NULLIF(item,'NULL') IS NOT NULL THEN 'leather item'
ELSE 'other item'
END AS item_category
FROM `table`这将返回一个包含2列的表:
H 110‘其他项目’。
如果您想过滤掉“其他项目的”,只需将其包装到一个CTE中:
WITH temp AS (<previous query>)
SELECT * FROM temp
WHERE item_category != 'other item'您提供的查询是返回3列:
→1,如果项目名称中有‘皮革’,则为NULL
NULL there因此,对于其他项,只有NULL和NULL。
https://stackoverflow.com/questions/71126509
复制相似问题