Форум: "Базы";
Текущий архив: 2003.09.01;
Скачать: [xml.tar.bz2];
ВнизВозможно ли сделать такой запрос? Найти похожие ветки
← →
gsvserg (2003-08-08 15:25) [0]Есть две связанные таблицы.
table1 - id, tovar
table2 - id, parametr
Нужно чтобы в результате отображалось поле, в котором была бы сумма записей table2.parametr, т.е.
id | tovar | par_union
1 имя товара parametr1+parametr2+...
...
← →
Семен Сорокин (2003-08-08 15:32) [1]возожно через курсор.
← →
denche (2003-08-08 15:33) [2]Если в 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:37) [3]denche (08.08.03 15:33)
это если parametr - число
gsvserg © (08.08.03 15:25)
какой тип поля parametr?
← →
gsvserg (2003-08-08 15:43) [4]Sum() не подходит, t2.parametr - поле символьное
← →
denche (2003-08-08 15:44) [5]было сказано сумму, а тип поля неплохо бы знать....
← →
Семен Сорокин (2003-08-08 15:45) [6]тогда см. Семен Сорокин © (08.08.03 15:32)
← →
gsvserg (2003-08-08 15:53) [7]>Семен Сорокин © (08.08.03 15:45)
А по подробнее о курсоре, какой курсор? что с ним делать?
← →
Семен Сорокин (2003-08-08 16:15) [8]если в поле все-же числа в символьном виде, то:
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 16:51) [9]Семен Сорокин © (08.08.03 16:15)
Кое что я конечно понял, но для меня это темный лес, я не знаю до такой степени SQL, поэтому лучше старым проверенным методом
с помощью adoquery и While not eof...
Всем спасибо...
← →
Семен Сорокин (2003-08-08 17:25) [10]gsvserg © (08.08.03 16:51)
никогда не поздно немного подучиться :))
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.09.01;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c