Форум: "Базы";
Текущий архив: 2002.07.08;
Скачать: [xml.tar.bz2];
ВнизМонстры, что с запросом? посоветуйте Найти похожие ветки
← →
Oleg_er (2002-06-13 15:26) [0]есть табличка (не очень большая - 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_er (2002-06-13 15:40) [1]а, вообще, возможно это все реализовать, а то у меня мучают смутные сомнения....
← →
Delirium (2002-06-13 15:52) [2]Для 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
← →
Delirium (2002-06-13 15:55) [3]Упс... ошибочка, теперь правильно:
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
← →
Lord Warlock (2002-06-13 16:01) [4]
> Delirium © (13.06.02 15:55)
для DBase тоже годится
← →
Oleg_er (2002-06-13 16:03) [5]не пойдет :-(
нужно что бы одновременно в двух столбцах инфа была см пример
name | kol1 | kol2
------------------
qqq1 | 21 | 23
← →
Delirium (2002-06-13 16:17) [6]Не ясно, что ты хочешь получить, приведи чёткий пример исходных данных и желаемый результат работы запроса.
← →
Oleg_er (2002-06-13 16:24) [7]исходные данные:
таблица:
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:29) [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
← →
Val (2002-06-13 16:30) [9]сдается мне, что не судьба одним запросом на Local SQL :(
← →
Lord Warlock (2002-06-13 16:32) [10]
> Delirium © (13.06.02 16:29)
В LocalSql так нельзя.
← →
Delirium (2002-06-13 16:32) [11]> Val
Стоит отказаться от BDE и для DBF-ов пользоваться Jet.
← →
Val (2002-06-13 16:44) [12]>Delirium © (13.06.02 16:32)
вопрос неоднозначный, зависит от задач.
← →
Delirium (2002-06-13 16:49) [13]Хм, естественно, однако приятнее пользоваться мощным ACCESS-овским SQL, нежели ограниченным Local SQL. И вообще, я - большой сторонник ADO :)
← →
Val (2002-06-13 17:09) [14]согласитесь, что при выборе самой базы и средств работы с ней вы руководствуетесь очень многими критериями. И удобнее возможности SQL-серверов, пусть light. А в некоторых задачах, где работа с базами(тем более с локальными) минимальна, можно обойтись вообще без SQL :)
Ну, это уже отступление от самого вопроса и обычный флейм :)
← →
oleg_d (2002-06-14 11:03) [15]а по-моему если ты из двух сразу таблиц пытаешься вытащить таким макаром информацию, то логически у тебя условие неверно, т.е. ты пытаешься связать две одинаковые таблицы по имени и тут же сравниваешь признаки 1 и 2, вообще-то во-первых надо наоборот(мне так кажется), а во-вторых что если R.prizn=2 и r1.prizn=1
но еще главная (IMHO) ошибка что в select стоит name, sum() как я помню выдает 1 результат(строку) для разных name.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.07.08;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.005 c