PDA

View Full Version : آموزش: راه حل: ادغام نتيجه هاي همسان در يك پاسخ كوئري



ali_ahr7
شنبه 01 خرداد 1389, 11:42 صبح
سلام دوستان من مدت ها دنبال راح حل سوال زير بودم و بالاخره تونستم بهترين راه حل اونو پيدا كنم و تصميم گرفتم اونو اينجا بذارم تا همه استفاده كنن.
شرح سوال بصورت زير است:

فرض كنيد بك جدول حاوي كد دانشجو و همچنين درس هاي اخذ شده وي ميباشد.
حال اگز بخواهيم با يك دستور select اطلاعات آنرا بازيابي كنيم بايد از دستور زير استفاده كنيم:

select st_id,dars from tbstudenr
كه نتايج برگردانده شده توسط sql بصورت زير است:
مثال:

1------->فيزيك
2------->رياضي
1-------->ربان

سوال اينجاست كه با چه دستوري نتيجه زير حاصل شود؟
1-------->فيزيك,زبان
2-------->رياضي

راح حل:
ابتدا بايد يك تابع بنويسيم.اين تابع براي پايگاه northwind نوشته شده،در صورت نياز شما آنرا براي خود تعيير دهيد:



CREATE FUNCTION udf_recursive ( @cid INT, @i INT )
RETURNS VARCHAR(8000) AS BEGIN
DECLARE @r VARCHAR(8000), @l VARCHAR(8000)
SELECT @i = @i - 1, @r = ProductName + ', '
FROM Northwind..Products p1
WHERE CategoryId = @cid
AND @i = ( SELECT COUNT(*) FROM Northwind..Products p2
WHERE p2.CategoryId = p1.CategoryId
AND p2.ProductName <= p1.ProductName ) ;
IF @i > 0 BEGIN
EXEC @l = dbo.udf_recursive @cid, @i ;
SET @r = @l + @r ;
END
RETURN @r ;
END


و بعد در برنامه يا كوئري آنالايزر اونو بصورت زير فراخواني ميكنيم.


SELECT CategoryId,
dbo.udf_recursive( CategoryId, COUNT(ProductName) )
FROM Northwind..Products
GROUP BY CategoryId ;


راستي الان وقت ندارم منبعشو بفرستم بعدا معرفي ميكنم.
با تشكر

ASKaffash
شنبه 01 خرداد 1389, 15:29 عصر
سلام
اینکار را با کرسر هم می توانید انجام دهید

محمد سلیم آبادی
شنبه 01 خرداد 1389, 16:14 عصر
http://www.30sharp.com/ShowArticle.aspx?nid=13&did=214&AuthorID=11