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

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

Монстры, что с запросом? посоветуйте [D5, dBase, FoxPro]


Oleg_er ©   (2002-06-13 15:26:00) 

есть табличка (не очень большая - 300 зап)
kol, prizn, name
нужно состряпать

name | kol1 | kol2
------------------
qqq | 342 | 0
qqq1 | 21 | 23
qwe | 0 | 22

причем
kol1 -> sum(kol), где prizn=1
kol2 -> sum(kol), где prizn=2

делаю так
select name, sum(r.kol) as kol1, sum(r1.kol) as kol2
from tbl r, tbl r1
where (r.prizn=1 or r1.prizn=2) and
r.name=r1.name

ВИСНЕТ!!!
я понимаю, что что - то не то, но как это побороть?


oleg_d   (2002-06-14 11:03:00) [1]

а по-моему если ты из двух сразу таблиц пытаешься вытащить таким макаром информацию, то логически у тебя условие неверно, т.е. ты пытаешься связать две одинаковые таблицы по имени и тут же сравниваешь признаки 1 и 2, вообще-то во-первых надо наоборот(мне так кажется), а во-вторых что если R.prizn=2 и r1.prizn=1
но еще главная (IMHO) ошибка что в select стоит name, sum() как я помню выдает 1 результат(строку) для разных name.


Val   (2002-06-13 17:09:00) [2]

согласитесь, что при выборе самой базы и средств работы с ней вы руководствуетесь очень многими критериями. И удобнее возможности SQL-серверов, пусть light. А в некоторых задачах, где работа с базами(тем более с локальными) минимальна, можно обойтись вообще без SQL :)
Ну, это уже отступление от самого вопроса и обычный флейм :)


Delirium   (2002-06-13 16:49:00) [3]

Хм, естественно, однако приятнее пользоваться мощным ACCESS-овским SQL, нежели ограниченным Local SQL. И вообще, я - большой сторонник ADO :)


Val   (2002-06-13 16:44:00) [4]

>Delirium © (13.06.02 16:32)
вопрос неоднозначный, зависит от задач.


Lord Warlock   (2002-06-13 16:32:00) [5]


> Delirium © (13.06.02 16:29)


В LocalSql так нельзя.



Delirium   (2002-06-13 16:32:00) [6]

> Val

Стоит отказаться от BDE и для DBF-ов пользоваться Jet.


Val   (2002-06-13 16:30:00) [7]

сдается мне, что не судьба одним запросом на Local SQL :(


Delirium   (2002-06-13 16:29:00) [8]

Опять таки, в T-SQL всё просто, обрабатываем предыдущий запрос как вложенный:

select name , Sum(Kol1) as Kol1, Sum(Kol2) as Kol2 from
(select name, sum(kol) as kol1, 0 as kol2 from tbl where prizn=1
group by name
union
select name, 0 as kol1, sum(kol) as kol2 from tbl where prizn=2
group by name) tmp
group by name


Oleg_er   (2002-06-13 16:24:00) [9]

исходные данные:
таблица:
kol | prizn | name
-------------------
342 | 1 | qqq
21 | 1 | qqq1
23 | 2 | qqq1
22 | 2 | qwe
нужно состряпать

name | kol1 | kol2
------------------
qqq | 342 | 0
qqq1 | 21 | 23
qwe | 0 | 22



Delirium   (2002-06-13 16:17:00) [10]

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


Oleg_er   (2002-06-13 16:03:00) [11]

не пойдет :-(
нужно что бы одновременно в двух столбцах инфа была см пример

name | kol1 | kol2
------------------
qqq1 | 21 | 23


Lord Warlock   (2002-06-13 16:01:00) [12]


> Delirium © (13.06.02 15:55)

для DBase тоже годится


Delirium   (2002-06-13 15:55:00) [13]

Упс... ошибочка, теперь правильно:

select name, sum(kol) as kol1, 0 as kol2 from tbl where prizn=1
group by name
union
select name, 0 as kol1, sum(kol) as kol2 from tbl where prizn=2
group by name
order by name


Delirium   (2002-06-13 15:52:00) [14]

Для MSSQL, я бы сделал так:

select name, sum(kol) as kol1, 0 as kol2 from tbl where prizn=1
group by name
union all
select id, 0 as kol1, sum(kol) as kol2 from tbl where prizn=2
group by name
order by name


Oleg_er   (2002-06-13 15:40:00) [15]

а, вообще, возможно это все реализовать, а то у меня мучают смутные сомнения....


Наверх

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