我正在检索一个产品的多个特性,并希望将它们显示在一个行中。下面是我目前正在检索的内容:
key waterproof oilfree parabenfree
183 1 null null
766 null 0 null
766 null null 0
991 null 0 null
991 null null 0一个产品可能有零个或更多的特征。我的目标是像这样找回它们:
key waterproof oilfree parabenfree
183 1 null null
766 null 0 0
991 null 0 0 被查询的表看起来类似于下面的表,其中qualifier定义了特性的类型。
key qualifier value
171 waterproof 1
766 oilfree 0
766 parabenfree 1
991 parabenfree 0
991 oilfree 0在CASE WHEN中,我将为每个特性创建一个列。当条件满足时,我希望看到该产品的价值。但是,每一行都定义了一个特性,这意味着可以为一个产品检索多个行。
SELECT
CASE WHEN f.qualifier LIKE '%waterproof%'
THEN f.value END as waterproof,
CASE WHEN f.qualifier LIKE '%parabenfree%'
THEN f.value END as parabenfree,
CASE WHEN f.qualifier LIKE '%oilfree%'
THEN f.value END as oilfree
FROM
features f我们能否在保持所需结构的同时,将这些行压缩成每个产品的一个行?
下面是一个可重复的例子:
-- create table
CREATE TABLE features (
key INTEGER,
qualifier TEXT,
value INTEGER
);
-- insert data
INSERT INTO features VALUES (183, 'waterproof', 1),
(766, 'oilfree', 0),
(766, 'oilfree', 1),
(991, 'parabenfree', 0),
(991, 'parabenfree', 1);
-- statement
SELECT
f.key,
CASE WHEN f.qualifier LIKE '%waterproof%'
THEN f.value END as waterproof,
CASE WHEN f.qualifier LIKE '%parabenfree%'
THEN f.value END as parabenfree,
CASE WHEN f.qualifier LIKE '%oilfree%'
THEN f.value END as oilfree
FROM
features f发布于 2022-01-13 11:58:05
可以使用max()聚合结果以消除空值,例如:
select f.[key],
Max(case when f.qualifier like '%waterproof%' then f.value end ) as waterproof,
Max(case when f.qualifier like '%parabenfree%' then f.value end ) as parabenfree,
Max(case when f.qualifier like '%oilfree%' then f.value end ) as oilfree
from features f
group by f.[key];https://stackoverflow.com/questions/70696122
复制相似问题