2013-04-22 3 views
2

У меня есть таблица, которая содержит имя, цвет1, цвет2, color3 и другие столбцы (SQLite):SQL-группы по 3 колонки со специальной функцией

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   

обратите внимание, что, когда он попадает в группу Амарильо, Azul, [пусто], он будет продолжать с Амарилло, Azul с независимостью от в колонке Wich каждый цвет, но я хочу, чтобы сохранить оригинальный цвет позицию столбца, как и я не хочу создавать другой столбец, только что заказанный.

Итак, я хочу, чтобы те группы, которые имеют одинаковые цвета, но в другом порядке, вместе.

Возможно ли это?

+1

обеспечьте хорошую структуру таблицы. это создает довольно путаницу. – Anvesh

+0

обновлено @Anvesh –

+2

Не могли бы вы предоставить хороший набор результатов, в вашем результирующем наборе три колонки есть, но есть ли все три цвета? Я думаю, что последние две колонки - это цветная колонка. если возможно, пожалуйста, укажите образцы данных и результат выборки – Anvesh

ответ

1

Try:

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.

+0

Удивительная работа там !, Он отлично работает, я хотел бы получить все Amarillo, Azul, NoColor, а затем все Azul, Amarillo, NoColor, не интеркалированы, но не нужны. Большое спасибо! –

+0

@ J.Arenas: Добро пожаловать! –

1

Если у меня есть это право:

select * from table1 
where 
'red' in (color1,color2,color3) 
    and 
'blue' in (color1,color2,color3) 

Ok здесь группа запросов для данных:

SQLFiddle demo

select * 

from someTable 
group by 
(select 
    group_concat(c1) 
    from 
    (
    select c1 from 
    ( 
    select color1 as c1 
    union all 
    select color2 as c1 
    union all 
    select color3 as c1 
) t2 
    order by c1 
) t1 
) 
+0

красное описание снова, я обновил его, но в целом я не хочу указывать цвет, я хочу, чтобы он был сделан автоматически –

+1

@ J.Arenas Query теперь обновляется. – valex

+0

Не получив желаемого результата, я опубликую желаемый результат в описании, я думал, что напишу это ясно, но, похоже, я ошибаюсь –

Смежные вопросы