首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每键将多行压缩为一行

每键将多行压缩为一行
EN

Stack Overflow用户
提问于 2022-01-13 11:50:47
回答 1查看 62关注 0票数 1

我正在检索一个产品的多个特性,并希望将它们显示在一个行中。下面是我目前正在检索的内容:

代码语言:javascript
复制
key     waterproof     oilfree     parabenfree
183     1              null        null
766     null           0           null
766     null           null        0
991     null           0           null 
991     null           null        0

一个产品可能有零个或更多的特征。我的目标是像这样找回它们:

代码语言:javascript
复制
key     waterproof     oilfree     parabenfree
183     1              null        null
766     null           0           0
991     null           0           0 

被查询的表看起来类似于下面的表,其中qualifier定义了特性的类型。

代码语言:javascript
复制
key    qualifier      value
171    waterproof     1
766    oilfree        0
766    parabenfree    1
991    parabenfree    0    
991    oilfree        0

CASE WHEN中,我将为每个特性创建一个列。当条件满足时,我希望看到该产品的价值。但是,每一行都定义了一个特性,这意味着可以为一个产品检索多个行。

代码语言:javascript
复制
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

我们能否在保持所需结构的同时,将这些行压缩成每个产品的一个行?

下面是一个可重复的例子:

代码语言:javascript
复制
-- 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

在线版本:https://www.mycompiler.io/view/83oxmgk

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-13 11:58:05

可以使用max()聚合结果以消除空值,例如:

代码语言:javascript
复制
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];
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70696122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档