Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.01;
Скачать: CL | DM;

Вниз

Возможно ли сделать такой запрос?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.031 c
14-1630
Е-Моё имя
2003-08-13 09:52
2003.09.01
маразм крепчал


14-1640
Best Guns
2003-08-12 20:06
2003.09.01
Сайт delphimaster не отвечал


3-1352
Vorobyev Sergey
2003-08-06 15:40
2003.09.01
Как использовать индексы Foxpro при подключении чере ODBC ?


9-1270
BBear
2003-03-01 20:49
2003.09.01
procedure TForum.Destoy;


1-1439
elf
2003-08-19 06:08
2003.09.01
Динамический массив