![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Монстры, что с запросом? посоветуйте [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]а, вообще, возможно это все реализовать, а то у меня мучают смутные сомнения....