Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Формирование запроса [D7, MySQL]


Шоломицкий С. А. ©   (2007-01-27 02:46:00) 

Прошу помочь в составлении запроса.
Имеется одна таблица, в ней есть поля 'name' и 'colvo'.

Мне необходимо вывести в ОДНУ СТРОКУ В РАЗНЫЕ СТОЛБЦЫ сумму значений поля 'colvo' для поля 'name'=Вася и 'name'=Коля

Пробовал так:
(SELECT SUM(`col`) 'n1' FROM akcii where name='Вася') union (SELECT SUM(`col`) 'n2' FROM akcii where name='Коля')
В результате запроса хотелось бы чтобы составилсь таблица:

n1                               n2
сумма для Васи            сумма для Коля

а в итоге получается так:
n1
сумма для Васи
сумма для Коля

Не хотелось бы разбивать на несколько запросов,  а сделать всё в одном. Пожалуйста, помогите!


Desdechado   (2007-01-27 16:52:00) [1]

> и от сюда совершенно непонятно, для кого сумма 20, а для кого 30!
Еще как понятно, если последовать совету и выдавать в первую колонку этого "кого". Для таких целей применяется GROUP BY

PS null можно заменить нулем, если есть специальная функция в mysql


Шоломицкий С. А.   (2007-01-27 16:26:00) [2]


> Чем
>
> Вася  20
> Коля  30
>
> хуже
>
> Вася  Коля
>  20      30


хуже тем, что есть ситуации, когда есть кроме Васи и Коли ещё перцы Дима и Андрей. Так вот, если димы и Андрес ещё нет в таблицы (у них нет акции) то получается так:
20
30
NULL

тоесть 3 записи для четёрёх челове..и от сюда совершенно непонятно, для кого сумма 20, а для кого 30!
Вот в чём траблы!((


sniknik   (2007-01-27 10:37:00) [3]

сделать наверняка можно, надо смотреть хелп по функциям MySQL или синтаксису... (для iif с помощью которого это можно сделать относится к функциям, для mssql case синтаксическая конструкция, как это в MySQL хз.)

принцип запроса примерно такой (по синтаксису это для аксесс, тебе не подойдет скорее всего)

SELECT Sum(iif(ID=значение ID для Васи, Col, 0)) AS 'n1', Sum(iif(ID=значение для Коли, Col, 0)) AS 'n2' FROM Table

сравнивать можно и по имени конечно, как у тебя, но лучше по значению ключевого поля как показал.

ест и другой подход через PIVOT табле (развернуть группировку), так что и по этому слову можеш покопаться в хелпе MySQL (названия функций/ключевые слова  часто одинаковые в различных движках. может и найдеш)


ЮЮ   (2007-01-27 07:41:00) [4]


>
> Не хотелось бы разбивать на несколько запросов,  а сделать
> всё в одном


Ты в одном и получил.
Какая разница, две записи по одному полю и одна запись в двух полях? Чтобы отобразить в DBGride? Так разбиение на нескольуо запросов этой проблемы тоже не решит. Добавь поле name в выюорку для идентификации для кого же ссума посчитана.

Чем

Вася  20
Коля  30

хуже

Вася  Коля
 20      30

???


Наверх

Титульная страница Поиск, карта сайта Написать письмо