PDA

View Full Version : کمک برای یک query



hasty_f
چهارشنبه 03 اسفند 1384, 20:30 عصر
با سلام
میشه اگه هر کدوم از دوستان تونستن منو در مورد این QUERY کمک کنند.

select t.title,b.au_id,a.au_fname from authors a inner join TitleAuthor b
on a.au_id=b.au_id inner join Titles t on b.Title_id=t.Title_id


چیزی که من میخوام این هستش که رکوردهای مختلفی برای یک کتاب که دارای چند نویسنده هست نداشته باشم.
یعنی در وافع وفتی کتابی دارای چند نویسنده هست همه اونها رو تو همون رکورد ‚ مثلا با یک جداکننده با هم بیاره.
پیشاپیش از لطفتون متشکرم.

mzjahromi
چهارشنبه 03 اسفند 1384, 20:48 عصر
تا اونجا که من اطلاع دارم همچین کاری با Query نمیشه مگه اینکه با StoredProcedure بنویسیش.

hasty_f
چهارشنبه 03 اسفند 1384, 20:53 عصر
تا اونجا که من اطلاع دارم همچین کاری با Query نمیشه مگه اینکه با StoredProcedure بنویسیش.

مرسی از جوابتون
اما میشه بگید چجوری؟ با SP?

mzjahromi
چهارشنبه 03 اسفند 1384, 21:43 عصر
یه چیز سر دستی اینه
تعریف یک تابع به این شکل


CREATE FUNCTION dbo.test111 (@test int)
RETURNS varchar(100) AS
BEGIN
declare @Names1 as varchar(100)
DECLARE @name1 varchar (20)
set @Names1='-'
DECLARE t_cursor CURSOR
FOR
SELECT Name
FROM Table2 where test=@test
OPEN t_cursor
FETCH NEXT FROM t_cursor INTO @name1
WHILE (@@FETCH_STATUS <> -1)
BEGIN
if @Names1='-'
set @names1=@name1
else
set @Names1=@Names1+','+@Name1
FETCH NEXT FROM t_cursor INTO @name1
END
CLOSE t_cursor
DEALLOCATE t_cursor
return @Names1
END

و ایجاد یک Query با استفاده از این تابع به شکل زیر


SELECT test, dbo.test111(test) AS Expr1
FROM dbo.Table1

البته برای حجم بالای اطلاعات ممکنه سرعت خوبی نداشته باشه

AminSobati
چهارشنبه 03 اسفند 1384, 22:46 عصر
دوست عزیزم،
کاری که شما قصد دارین انجام بدین، به یک User Defined Aggregate نیاز داره. UDAها در SQL Server 2005 قابل تعریف هستند، در 2000 خیر.
در SQL Server 2000 به این شکل میتونین:


USE northwind
go

create function fn_SumCity (@Country nvarchar(50))
returns nvarchar(1000)
as
begin
declare @SumCity nvarchar(1000)
set @SumCity=''
select @SumCity=@SumCity+city+',' from
(select distinct country,city from customers) tmp where country=@country
set @SumCity= left(@SumCity,len(@SumCity)-1)
return @SumCity
end
go

--NOW TRY IT:
select distinct country,dbo.fn_SumCity(country) as Cities from customers

این مثال نشون میده که از هر کشور، چه شهرهایی در جدول Customers وجود داره.

AminSobati
پنج شنبه 04 اسفند 1384, 00:37 صبح
دوست عزیزم،
کاری که شما قصد دارین انجام بدین، به یک User Defined Aggregate نیاز داره. UDAها در SQL Server 2005 قابل تعریف هستند، در 2000 خیر.
در SQL Server 2000 به این شکل میتونین:


USE northwind
go

create function fn_SumCity (@Country nvarchar(50))
returns nvarchar(1000)
as
begin
declare @SumCity nvarchar(1000)
set @SumCity=''
select @SumCity=@SumCity+city+',' from
(select distinct country,city from customers) tmp where country=@country
set @SumCity= left(@SumCity,len(@SumCity)-1)
return @SumCity
end
go

--NOW TRY IT:
select distinct country,dbo.fn_SumCity(country) as Cities from customers

این مثال نشون میده که از هر کشور، چه شهرهایی در جدول Customers وجود داره.

hasty_f
پنج شنبه 04 اسفند 1384, 09:52 صبح
دوست عزیزم،
کاری که شما قصد دارین انجام بدین، به یک User Defined Aggregate نیاز داره. UDAها در SQL Server 2005 قابل تعریف هستند، در 2000 خیر.
در SQL Server 2000 به این شکل میتونین:


USE northwind
go

create function fn_SumCity (@Country nvarchar(50))
returns nvarchar(1000)
as
begin
declare @SumCity nvarchar(1000)
set @SumCity=''
select @SumCity=@SumCity+city+',' from
(select distinct country,city from customers) tmp where country=@country
set @SumCity= left(@SumCity,len(@SumCity)-1)
return @SumCity
end
go

--NOW TRY IT:
select distinct country,dbo.fn_SumCity(country) as Cities from customers

این مثال نشون میده که از هر کشور، چه شهرهایی در جدول Customers وجود داره.


از کمکتون کمال تشکر رو دارم.
لطف کردید.

hasty_f
جمعه 05 اسفند 1384, 19:29 عصر
با تشکر مجددد از آفای جهرمی و ثباتی
کدی رو که میخواستم تکمیل کردم اینجا میگذارم اگه دوستان دیگه خواستن‚ داشته باشن.


create function fn_Author (@Title nvarchar(50))
returns nvarchar(100)
as
begin
declare @author nvarchar(100)
set @author=''
select @author=@author+authorname+',' from
(select distinct c.title,a.authorname from tbauthor a inner join tbbookauthor b on
a.authorid=b.authorid inner join tbcatalog c on b.bookid=c.bookid ) az where title=@title
set @author= left(@author,len(@author)-1)
return @author
end
go



select distinct title,dbo.fn_Author(title) authors,publication,subject
from
tbauthor a inner join tbbookauthor b on
a.authorid=b.authorid inner join tbcatalog c on b.bookid=c.bookid