我正在检索产品的多个功能,并希望将它们显示在一行中。这是我目前正在检索的内容:
key waterproof oilfree parabenfree
183 1 null null
766 null 0 null
766 null null 0
991 null 0 null
991 null null 0
Run Code Online (Sandbox Code Playgroud)
一个产品可能有零个或多个功能。我的目标是像这样检索它们:
key waterproof oilfree parabenfree
183 1 null null
766 null 0 0
991 null 0 0
Run Code Online (Sandbox Code Playgroud)
查询的表类似于下面的表,其中qualifier
定义了功能类型。
key qualifier value
171 waterproof 1
766 oilfree 0
766 parabenfree 1
991 parabenfree 0
991 oilfree 0
Run Code Online (Sandbox Code Playgroud)
在 a 中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
Run Code Online (Sandbox Code Playgroud)
我们是否能够将这些行压缩为每个产品一个,同时保持所需的结构?
这是一个可重现的示例:
-- 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
Run Code Online (Sandbox Code Playgroud)
在线版本: https: //www.mycompiler.io/view/83oxmgk
您可以使用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];
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
70 次 |
最近记录: |