Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > Отдельное условие для каждой колонки


Автор: Riddik 12.1.2009, 11:30
table1:

kolonka1   kolonka2
15               0
2                 1
78               2
214             3
123             4

Вот запрос:



Код

select sum(kollonka1), sum(kolonca1) from table1

where kolonka2<3


А нужно чтобы вторая колонка сформировалась по другому условию: 
Код

where kolonka2>3

И таких колонок несколько. Как это сделать?

Автор: skyboy 12.1.2009, 11:41
два запроса. так корректнее - по смыслу разные данные забираем разными запросами.
или через union:
Код

select sum(kollonka1)
from table1
where kolonka2< 3
union all
select sum(kolonca1) 
from table1
where kolonka2> 3

Автор: pizzz 12.1.2009, 11:44
AND `kolonka2`< '7 ' OR `kolonka2`= '7 '
и так далее

Автор: Riddik 12.1.2009, 11:47
Тогда получается не две колонки, а две строчки!
А как сделать, чтобы именно две колонки было?

Добавлено через 25 секунд
pizzz, сейчас попробую

Добавлено через 7 минут и 44 секунды
pizzz,  всё равно в обоих колонках одинаково получается

Автор: Zloxa 12.1.2009, 17:59
Код

select sum(сase when kolonka2<3 then kolonka1 end)
         , sum(case when kolonka2>3 then kolonca1 end) 
from table1

Автор: Deniz 13.1.2009, 08:52
Если нет case
Код

select
  (select sum(kollonka1) from table1 where kolonka2 < 3) as k1,
  (select sum(kolonca1) from table1 where kolonka2 > 3) as k2
from OneRowTable
OneRowTable - таблица с одной записью

Автор: Riddik 13.1.2009, 09:48
Zloxa,  большое спасибо, всё получилось!


Deniz,  тоже спасибо!

Автор: Nikolja 30.6.2010, 16:37
Цитата

OneRowTable - таблица с одной записью 

Или немного проще.
Чем ТАКОЙ пример хорош, что он будет работать, думаю, в ЛЮБОЙ версии SQL.
(Тот же case, как в примере выше, работает не везде.)

Чтобы исключить повторения, можно использовать ключевое слово DISTINCT.

Например: 
отдельные условия для каждой колонки
1) в 1-ой колонке суммируем числа, меньшие 20-ти
2) во 2-ой колонке суммируем числа, меньшие 4-х

Тоже получаем итог, как и надо - в ОДНОЙ строке, и в РАЗНЫХ колонках.

Код

select distinct
  (select sum(kolonka1) from table1 where kolonka1 < 20) as k1,
  (select sum(kolonka2) from table1 where kolonka2 < 4) as k2
from table1

А так - вывести сначала ВСЕ числа, а в последней строчке - сумму нужных чисел (согласно заданных условий).

Код

select kolonka1, kolonka2
from table1
union all
/*Выводим сумму определённых условием чисел*/
select distinct
  (select sum(kolonka1) from table1 where kolonka1 < 20) as k1,
  (select sum(kolonka2) from table1 where kolonka2 < 4) as k2
from table1

Автор: Frees 30.6.2010, 20:00
Код

select sum(iif(kolonka2>3,0,kollonka1)), sum(iif(kolonka2<=3,0,kollonka1)) from table1

может как то так?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)