Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отдельное условие для каждой колонки 
V
    Опции темы
Riddik
Дата 12.1.2009, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



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

И таких колонок несколько. Как это сделать?
PM MAIL   Вверх
skyboy
Дата 12.1.2009, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 15
Всего: 260



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

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

PM MAIL   Вверх
pizzz
Дата 12.1.2009, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 14.12.2008
Где: Омск

Репутация: нет
Всего: 8



AND `kolonka2`< '7 ' OR `kolonka2`= '7 '
и так далее
--------------------
Спасибо много, жмем кнопку репутация.  Извините меня за орфографические ошибки, я стараюсь не ошибаться, а они все равно просачиваются гады.     
PM MAIL ICQ   Вверх
Riddik
Дата 12.1.2009, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



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

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

Добавлено через 7 минут и 44 секунды
pizzz,  всё равно в обоих колонках одинаково получается
PM MAIL   Вверх
Zloxa
Дата 12.1.2009, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Код

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



--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Deniz
Дата 13.1.2009, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 6
Всего: 44



Если нет 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 - таблица с одной записью


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Riddik
  Дата 13.1.2009, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



Zloxa,  большое спасибо, всё получилось!


Deniz,  тоже спасибо!
PM MAIL   Вверх
Nikolja
Дата 30.6.2010, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 24.2.2009
Где: Черкассы

Репутация: нет
Всего: -1



Цитата

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

PM MAIL   Вверх
Frees
Дата 30.6.2010, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 2
Всего: 54



Код

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

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


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.1049 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.