Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.48 MB
Время: 0.015 c
6-55241
novomod
2002-04-07 15:17
2002.06.17
Help.TClientSocket and TServerSocket.


6-55235
Tom
2002-04-05 13:26
2002.06.17
Как установить длину буфера? (WNetGetUniversalName)


3-54973
AJ blacksmith
2002-05-13 18:39
2002.06.17
Работа с датой


14-55297
Igorek
2002-05-03 00:42
2002.06.17
Кто как решает алгоритмические трудности?


3-55027
Eugene
2002-05-23 05:04
2002.06.17
Как правильно узнать структуру таблицы dbase или Foxpro ?