Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


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]

возожно через курсор.


Наверх

Титульная страница Поиск, карта сайта Написать письмо