![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Возможно ли сделать такой запрос?
gsvserg © (2003-08-08 15:25:00)
Есть две связанные таблицы.
table1 - id, tovar
table2 - id, parametr
Нужно чтобы в результате отображалось поле, в котором была бы сумма записей table2.parametr, т.е.
id | tovar | par_union
1 имя товара parametr1+parametr2+...
...
Семен Сорокин (2003-08-08 17:25:00) [1]
gsvserg © (08.08.03 16:51)
никогда не поздно немного подучиться :))
gsvserg (2003-08-08 16:51:00) [2]
Семен Сорокин © (08.08.03 16:15)
Кое что я конечно понял, но для меня это темный лес, я не знаю до такой степени SQL, поэтому лучше старым проверенным методом
с помощью adoquery и While not eof...
Всем спасибо...
Семен Сорокин (2003-08-08 16:15:00) [3]если в поле все-же числа в символьном виде, то:
select t1.id, t1.tovar, sum(CAST(t2.parametr AS int или numeric(?, ?))) as par_union
from table1 t1 inner join table2 t2 on t1.id = t2.id
group by t1.id, t1.tovar
инчаче, если надо склеить строки, то вот навскидку накидал:
CREATE TABLE #temp (id int NOT NULL, tovar varchar(?), par_union varchar(255))
DECLARE @id int, @old int, @par varchar(?), @res_par varchar(255), @tovar varchar(?)
DECLARE #curs_temp CURSOR STATIC FORWARD_ONLY
FOR SELECT t1.id, t1.tovar, t2.parametr FROM table2 t2 INNER JOIN table1 t1 ON t1.id = t2.id ORDER BY t1.id
OPEN #curs_temp
SELECT @res_par = "", @old = 0
FETCH #curs_temp INTO @id, @tovar, @par
WHILE @@FETCH_STATUS = 0 BEGIN
IF @old <> @id BEGIN
IF @old <> 0
( id, tovar, par_union)
если в поле все-же числа в символьном виде, то:
select t1.id, t1.tovar, sum(CAST(t2.parametr AS int или numeric(?, ?))) as par_union
from table1 t1 inner join table2 t2 on t1.id = t2.id
group by t1.id, t1.tovar
инчаче, если надо склеить строки, то вот навскидку накидал:
CREATE TABLE #temp (id int NOT NULL, tovar varchar(?), par_union varchar(255))
DECLARE @id int, @old int, @par varchar(?), @res_par varchar(255), @tovar varchar(?)
DECLARE #curs_temp CURSOR STATIC FORWARD_ONLY
FOR SELECT t1.id, t1.tovar, t2.parametr FROM table2 t2 INNER JOIN table1 t1 ON t1.id = t2.id ORDER BY t1.id
OPEN #curs_temp
SELECT @res_par = "", @old = 0
FETCH #curs_temp INTO @id, @tovar, @par
WHILE @@FETCH_STATUS = 0 BEGIN
IF @old <> @id BEGIN
IF @old <> 0
INSERT INTO #temp (id, tovar, par_union)
VALUES @id, @tovar, @res_par
SELECT @res_par = "", @old = @id
END
ELSE
SET @res_par = @res_par + @par
FETCH #curs_temp INTO @id, @tovar, @par
END
CLOSE #curs_temp
DEALLOCATE #curs_temp
SELECT * FROM #temp ORDER BY id
DROP TABLE #temp
gsvserg (2003-08-08 15:53:00) [4]
>Семен Сорокин © (08.08.03 15:45)
А по подробнее о курсоре, какой курсор? что с ним делать?
Семен Сорокин (2003-08-08 15:45:00) [5]
тогда см. Семен Сорокин © (08.08.03 15:32)
denche (2003-08-08 15:44:00) [6]
было сказано сумму, а тип поля неплохо бы знать....
gsvserg (2003-08-08 15:43:00) [7]
Sum() не подходит, t2.parametr - поле символьное
Семен Сорокин (2003-08-08 15:37:00) [8]
denche (08.08.03 15:33)
это если parametr - число
gsvserg © (08.08.03 15:25)
какой тип поля parametr?
denche (2003-08-08 15:33:00) [9]
Если в table1 сочетание id и tovar уникально, то
это просто
select t1.id, t1.tovar, sum(t2.parametr) as par_union
from table1 t1 inner join table2 t2 on t1.id = t2.id
group by t1.id, t1.tovar
Семен Сорокин (2003-08-08 15:32:00) [10]
возожно через курсор.