我有一个包含 name、color1、color2、color3 和其他列(SQLite)的表:
CREATE TABLE data (name TEXT, lvlavailable INTEGER, lvlExtra TEXT,
color1 TEXT, color2 TEXT, color3 TEXT);
当前数据
INSERT INTO "someTable" VALUES ("name","Amarillo","NoColor","NoColor");
INSERT INTO "someTable" VALUES ("name","Amarillo","NoColor","NoColor");
INSERT INTO "someTable" VALUES ("name","Amarillo","Azul","NoColor");
INSERT INTO "someTable" VALUES ("name","Amarillo","Azul","NoColor");
INSERT INTO "someTable" VALUES ("name","Amarillo","Rojo","NoColor");
INSERT INTO "someTable" VALUES ("name","Amarillo","Rojo","NoColor");
INSERT INTO "someTable" VALUES ("name","Amarillo","Rojo","NoColor");
INSERT INTO "someTable" VALUES ("name","Amarillo","Rojo","NoColor");
INSERT INTO "someTable" VALUES ("name","Amarillo","Rojo","Verde");
INSERT INTO "someTable" VALUES ("name","Amarillo","Verde","NoColor");
INSERT INTO "someTable" VALUES ("name","Amarillo","Violeta","NoColor");
INSERT INTO "someTable" VALUES ("name","Azul","NoColor","NoColor");
INSERT INTO "someTable" VALUES ("name","Azul","NoColor","NoColor");
INSERT INTO "someTable" VALUES ("name","Azul","Amarillo","NoColor");
INSERT INTO "someTable" VALUES ("name","Azul","Amarillo","NoColor");
INSERT INTO "someTable" VALUES ("name","Azul","Amarillo","NoColor");
INSERT INTO "someTable" VALUES ("name","Azul","Amarillo","Rojo");
本例中的列名称不相关 *我知道由于列数的原因插入不正确,但我认为您明白了*
当前选择语句:
SELECT name,
color1,
CASE WHEN color2 = 'NoColor' THEN '' ELSE color2 END as color2,
CASE WHEN color3 = 'NoColor' THEN '' ELSE color3 END as color3
FROM someTable
GROUP BY color1,color2,color3,name
案件用于其他目的
当前结果:
name Amarillo
name Amarillo
name Amarillo Azul
name Amarillo Azul
name Amarillo Rojo
name Amarillo Rojo
name Amarillo Rojo
name Amarillo Rojo
name Amarillo Rojo Verde
name Amarillo Verde
name Amarillo Violeta
name Azul
name Azul
name Azul Amarillo
name Azul Amarillo
name Azul Amarillo
name Azul Amarillo Rojo
颜色名称是西类牙语,抱歉
期望的结果:
name Amarillo
name Amarillo
name Amarillo Azul
name Amarillo Azul
name Azul Amarillo
name Azul Amarillo
name Azul Amarillo
name Azul Amarillo Rojo
name Amarillo Rojo
name Amarillo Rojo
name Amarillo Rojo
name Amarillo Rojo
name Amarillo Rojo Verde
name Amarillo Verde
name Amarillo Violeta
name Azul
name Azul
请注意,当它获取组 Amarillo,Azul,[empty] 时,它将继续 Amarillo,Azul,其中独立的列是每种颜色,但我想保持原始颜色列位置,如图所示,但我不这样做不想创建另一列,只是订购了。
所以,我想要的是将那些具有相同颜色但顺序不同的组放在一起。
这可能吗?
最佳答案
尝试:
select name,
color1,
case color2 when 'NoColor' then '' else color2 end as colour2,
case color3 when 'NoColor' then '' else color3 end as colour3
from data
order by
case
when color2 = 'NoColor' then color1
when color3 = 'NoColor' then min(color1, color2)
else min(color1,color2,color3)
end,
case
when color2 = 'NoColor' then ''
when color3 = 'NoColor' then max(color1, color2)
else max(min(color1,color2),min(color1,color3),min(color2,color3))
end,
case color3
when 'NoColor' then ''
else max(color1,color2,color3)
end
SQLFiddle here .
关于SQL 按 3 列分组,具有特殊功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16147240/