ورود

View Full Version : سوال: اعمال ردیف و یا جمع سطرهای قبلی یک table در ستون یک view



hsalimi
شنبه 23 مرداد 1389, 13:20 عصر
سلام
چگونه می توان در یک view یا Query یک ستون داشته باشیم که ردیف رکوردها یا شماره سطر را بدهد؟ یا اینکه یک ستونی داشته باشیم که مثلا در هر سطر یک جمع یک فیلد از سطرهای قبل را نمایش دهد.

m_omrani
شنبه 23 مرداد 1389, 15:48 عصر
براي به دست آوردن شماره سطر بايد از ROW_NUMBER() استفاده کنيد. چيزي مثل اين:

select row_number() over(order by ID),title from city

اضافه کردن ستوني که براي هر رکورد، جمع يک فيلد ديگر تا رکورد فعلي را بدهد را هم آقاي ثباتي بهتر مي داند. :لبخندساده:

محمد سلیم آبادی
شنبه 23 مرداد 1389, 23:46 عصر
چگونه می توان در یک view یا Query یک ستون داشته باشیم که ردیف رکوردها یا شماره سطر را بدهد؟
اینجا (http://www.30sharp.com/article/13/195/11/%d8%b4%d9%85%d8%a7%d8%b1%d9%87-%db%8c-%d8%b3%d8%b7%d8%b1-%d8%af%d8%a7%d8%af%d9%86-%d8%a8%d9%87-%d9%86%d8%aa%db%8c%d8%ac%d9%87-%db%8c-query.aspx) را ببینید.
اگر در نسخه 2005 به بالا دارین کار می کنید. از روش ROW_NUMBER این بسادگی امکان پذیر است. و برای ساخت ویو کدی شبیه به این اجرا کنید:


CREATE VIEW view_name AS
SELECT *, row_num = ROW_NUMBER() OVER(ORDER BY identity ASC) FROM table_name


و اگر هم در 2000 می خواهین با کمک یک View یا Query این کار صورت بگیره از روش زیر این کار امکان پذیر هست:


SELECT *, row_num = (SELECT COUNT(*) FROM table_name AS B WHERE B.id <= A.id)
FROM table_name AS A


همچنین برای مباحث پیشرفته تر به اینجا رجوع کنید:
http://www.30sharp.com/article/13/231/11/analytical-ranking-functions.aspx


یا اینکه یک ستونی داشته باشیم که مثلا در هر سطر یک جمع یک فیلد از سطرهای قبل را نمایش دهد.
این مساله به running total مشهور هست. به مقاله زیر رجوع کنید:
http://www.sqlservercentral.com/articles/Advanced+Querying/61716/

ولی اگر دنبال یک روش خیلی ساده می گردین این را امتحان کنید:


SELECT *, SUM_Total = (SELECT SUM(value) FROM table_name AS B
WHERE B.id <= A.id)
FROM table_name AS A