我正在檢索產品的多個功能,并希望將它們顯示在一行中。這是我目前正在檢索的內容:
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
在線版:https ://www.mycompiler.io/view/83oxmgk
uj5u.com熱心網友回復:
您可以使用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://www.uj5u.com/net/410533.html
標籤:
