Прежде всего, почему вы используете числа (ну, ладно, строки, которые можно напрямую преобразовать в числа) в качестве имен столбцов? Это просто напрашивается на неприятности, особенно в where
или group by
заявлениях (WHERE '1'>0
выглядит в лучшем случае странно).
Во-вторых, вы правы в том, что вы не можете использовать *
в выражении case
. Вам нужно будет выполнить оператор case
для каждого столбца отдельно и составить таблицу из всех них. Тем не менее, это не работает, когда имена столбцов (по существу) числа:
select case
when '1'>0 then 3
when '1'<0 then 5
when '1'==0 then 8
when '1'==1.0 then 4
else 99
end
from correlation;
выходы
3
3
3
Вместо этого давайте попробуем разумные имена столбцов:
sqlite> create table correlation2 (c1 real,c2 real,c3 real);
sqlite> insert into correlation2 values (1.0,-0.4,0.6);
sqlite> insert into correlation2 values (-0.4,1.0,0.2);
sqlite> insert into correlation2 values (0.6,0.2,1.0);
Теперь утверждение case дает:
sqlite> select case when c1>0 then 3 when c1<0 then 5 when c1==0 then 8 when c1==1.0 then 4 else 99 end from correlation2;
case when c1>0 then 3 when c1<0 then 5 when c1==0 then 8 when c1==1.0 then 4 else 99 end
3
5
3
Теперь вы хотели, чтобы значения столбца были
4
5
3
Однако, это не то, как работает оператор case: начиная с 1.0> 1, оценивается первая ветвь оператора case (и, следовательно, первая запись присваивается 3, а не 4). Это то, что вы имели в виду?
sqlite> select case when c1>0 and c1!=1 then 3 when c1<0 then 5 when c1==0 then 8 when c1==1 then 4 else 99 end from correlation2;
case when c1>0 and c1!=1 then 3 when c1<0 then 5 when c1==0 then 8 when c1==1 then 4 else 99 end
4
5
3