Текущий архив: 2002.06.17;
Скачать: CL | DM;
ВнизФункции агрегирования для строк в SQL Найти похожие ветки
← →
Wild (2002-05-23 16:22) [0]такая фигня
есть две таблицы
T1
=====
ID
....
и
T2
====
ID
T1_ID
Value
Мне, например, надо узнать какие T2.Value относятся к каждой записи в T1
select T1.ID, T2.Value from T1,T2 where T2.T1_ID=T1.ID
Ну он мне типа выдаст:
ID Value
==== ========
1 1
1 2
1 3
2 1
2 2
3 3
А вот можно вот что бы так:
ID Value
==== ========
1 1,2,3
2 1,2
3 3
← →
xGrey (2002-05-23 17:40) [1]Если я правильно понял вопрос, то то,что Вы назаваете "ф-цией агрегирования строк" придется писать самому. Примерный вариант на Oracle:
function GetStr(inT1_id in integer) return varchar2 as
s varchar2(10000);
begin
for r in
(select value from t2 where t2.T1_ID=inT1_id)
loop
s:=s||to_char(r.value)||",";
end loop;
return s;
end;
Вызов:
select t1.id, GetStr(t1.ID) from t1
order by t1.id
← →
Johnmen (2002-05-23 17:41) [2]А вот так чтобы так - НЕЛЬЗЯ...
← →
Johnmen (2002-05-23 17:46) [3]>xGrey ©
Ты уверен, что конструкция рабочая ?
for r in (select value from t2 where t2.T1_ID=inT1_id)
я бы сначала проверил... :)
← →
xGrey (2002-05-23 17:55) [4]Для Oracle - рбочая, проверял. Там так можно организовать курсорный цикл и неявно инициализировать переменную курсорного цикла.
← →
sniknik (2002-05-23 18:42) [5]аналог для MSSQL
CREATE function GetStr (@id int)
RETURNS varchar (8000)
AS
BEGIN
DECLARE @Ret varchar (8000)
DECLARE @S varchar (8000)
DECLARE CountCur CURSOR FOR
SELECT CAST(PRICERUB AS varchar (8)) FROM CASHSAIL WHERE [Id] = @id
OPEN CountCur
FETCH NEXT FROM CountCur INTO @Ret
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM CountCur INTO @S
SET @Ret= @Ret + "," + @S
END
CLOSE CountCur
DEALLOCATE CountCur
RETURN @Ret
END
select [id], dbo.GetStr([id]) from cashsail
order by [id]
Страницы: 1 вся ветка
Текущий архив: 2002.06.17;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.006 c