PDA

View Full Version : رکوردهای تکراری در یک Table



milad-fa
پنج شنبه 13 آبان 1389, 15:44 عصر
سلام دوستان،
یک سوال داشتم ممنون میشم اگه راهنماییم کنید.
با چه دستوری میتونم رکورد هایی که در یک Table هستند و یک فیلد خاصشون که مد نظر منه (نه فیلدهای نامشخص) بیش از یکبار تکرار شده رو بدست بیارم؟!
با تشکر.

fghdmhmmd
پنج شنبه 13 آبان 1389, 17:09 عصر
سلام.اگه درست متوجه سوالتون شده باشم فكر ميكنم با استفاده از دستور زير بتوانيد اين كار رو انجام دهيد :

Select ID,Count(*) From tb_name where filed=?
با اين دستور ميتونيد تعداد ركوردهاي مورد نظر فيلدتون رو به همراه ID فيلدها بدست بياريد.بعدش ميتونيد شرط بزاريد كه اگه از 1 بيشتره كار مورد نظر شما رو انجام بده.

fghdmhmmd
پنج شنبه 13 آبان 1389, 17:11 عصر
Select ID,Count(*) From tb_name where filed=? and Count(*)>1

milad-fa
پنج شنبه 13 آبان 1389, 18:06 عصر
ممنون دوست عزیز ولی کدتون مشکلم رو حل نکرد!
عکس زیر را ببینید منظورم یک چنین چیزی است.
http://barnamenevis.org/forum/attachment.php?attachmentid=59635&stc=1&d=1288883162
شماره های 1و2 بیش از یکبار در جدول تکرار شده اند،به همین دلیل در خروجی وجود دارند.اگر هم بشه تعداد تکرار هر کدوم رو در فیلد دیگه ای بدست آورد عالی میشه.
ممنون میشم راهنماییم کنید.
با تشکر.

fghdmhmmd
پنج شنبه 13 آبان 1389, 18:17 عصر
create function Get_Record
(
@Name as Nvarchar(50)
)
Returns Table
as
begin
declare @count as int
declare @tb as Table
set @count=(select Count(shomareh) from tb_name where name=@Name)
if(@count>1)
set @tb=(select Distinct shomareh from tb_name where name=@Name)
return @tb
end
دوست عزيز من اين كد رو بدون تست نوشتم.ولي فكر ميكنم كه درست باشه.البته بايد براي Else دستور If هم كد بنويسي.من چون عجله دارم نميرسم بيشتر توضيح بدم.بايد برم.اگه نتونستي Comment بزار برات كاملشو ميزارم.

milad-fa
پنج شنبه 13 آبان 1389, 18:33 عصر
دوست عزیز ممنون از کمکت ولی منظور من با view بود!
آیا امکانش هست؟!
مرسی.

MOJTABAATEFEH
پنج شنبه 13 آبان 1389, 19:12 عصر
سلام دوستان،
یک سوال داشتم ممنون میشم اگه راهنماییم کنید.
با چه دستوری میتونم رکورد هایی که در یک Table هستند و یک فیلد خاصشون که مد نظر منه (نه فیلدهای نامشخص) بیش از یکبار تکرار شده رو بدست بیارم؟!
با تشکر.

دوست عزیز از کد زیر استفاده نمایید:


SELECT Shomareh , COUNT(*) as p

into #TempT from table1 group by shomareh

select * from #TempT where P>1
drop table #TempT


موفق باشید

milad-fa
پنج شنبه 13 آبان 1389, 19:33 عصر
دوست عزیز از کد زیر استفاده نمایید:


SELECT Shomareh , COUNT(*) as p

into #TempT from table1 group by shomareh

select * from #TempT where P>1
drop table #t


موفق باشید


ممنون ولی Error زیر رو میده!
http://barnamenevis.org/forum/attachment.php?attachmentid=59638&stc=1&d=1288888375
باید چیکار کنم؟!
مرسی.

milad-fa
پنج شنبه 13 آبان 1389, 19:48 عصر
دوست عزیز کد اصلاح شد
ممنون ولی هر بار که Run میکنم پیغام زیر رو میده و هیج خروجی هم نمیده!
http://barnamenevis.org/forum/attachment.php?attachmentid=59639&stc=1&d=1288889282
دلیلش چیه؟!
مرسی.

MOJTABAATEFEH
پنج شنبه 13 آبان 1389, 19:57 عصر
دوست عزیز کد رو تست کردم مشکلی نداره

milad-fa
پنج شنبه 13 آبان 1389, 20:02 عصر
دوست عزیز کد رو تست کردم مشکلی نداره
نوع داده های شما چیه؟
واسه من هم shomareh و هم nam از نوع Char هستن!
من از ورژن 2000 استفاده میکنم آیا امکان داره به خاطر این باشه؟

m_omrani
پنج شنبه 13 آبان 1389, 23:32 عصر
چه کارهای عجیب و غریب و البته وحشتناکی برای به دست آوردن رکوردهای تکراری انجام می دهید!
خوب. می دانید دوستان. البته عذر می خواهم. اما برای به دست آوردن رکوردهای تکراری اولاً باید از GROUP BY و ثانیاً باید از HAVING استفاده کنید و دقت کنید که هرگز نمی توانید در ستون های SELECT، کلید رکوردها را استفاده کنید. علتش هم طبیعی است. چون کلید است و مقدار منحصر به فرد دارد (به ازاء هر رکورد). لذا تاثیر GROUP BY را به کل از بین می برد.

لذا دقیقاً باید روی ستونی که می خواهید تکرارش را به دست بیاورید GROUP BY بزنید. مثلاً این طوری:


SELECT name,COUNT(name) FROM my_table GROUP BY name HAVING COUNT(name) > 1

milad-fa
جمعه 14 آبان 1389, 09:18 صبح
ممنون دوست عزیز،خیلی عالی بود.دستت درد نکنه.
دو تا سوال دیگه هم دارم ممنون میشم اگه کمکم کنید:
1-دستور GROUP BY برای چه کاری استفاده میشه و دقیقاً چه کاربردی داره؟!
2-چرا دستور زیر اشتباه است؟
SELECT DISTINCT SHOMAREH,* FROM Table1
مثلاً الان table من 10تا فیلد داره که من میخوام با * همه رو واسم بیاره ولی Error میده ولی وقتی اسم تک تک فیلدها رو مینویسم جواب میده!
ممنون از کمکتون.
با تشکر.

mohsensaghafi
جمعه 14 آبان 1389, 10:28 صبح
سلام دوست عزیز.
1- دستور Group By برای دسته بندی و گروه بندی رکورد ها بر اساس اشتراکات خاص استفاده می شه. مثلا شما می خوای تمام افراد درون جدول رو بر اساس دپارتمانی که توش کار می کنن دسته بندی کنی و بدونی که تو در دپارتمان چند نفر کار می کنن. واسه همچین مسائلی که نیاز به گروه کردن رکورد ها پیش می آد از این دستور استفاده می شه.
2- من مشابه همین دستور شما رو رو سیستم خودم نوشتم اما Error نگرفتم.
می شه بیشتر در مورد جدولت توضیح بدی.
موفق باشی و پیروز

milad-fa
جمعه 14 آبان 1389, 13:12 عصر
با سلام،

سلام دوست عزیز.
1- دستور Group By برای دسته بندی و گروه بندی رکورد ها بر اساس اشتراکات خاص استفاده می شه. مثلا شما می خوای تمام افراد درون جدول رو بر اساس دپارتمانی که توش کار می کنن دسته بندی کنی و بدونی که تو در دپارتمان چند نفر کار می کنن. واسه همچین مسائلی که نیاز به گروه کردن رکورد ها پیش می آد از این دستور استفاده می شه.

اگه براتون مقدوره در قالب یک Table و با یک مثال همراه کدش توضیح بدید واقعاً ممنون میشم.

2- من مشابه همین دستور شما رو رو سیستم خودم نوشتم اما Error نگرفتم.
حق با شماست اشتباه از من بود.
ممنون از لطفتون.
با تشکر.

MOJTABAATEFEH
جمعه 14 آبان 1389, 19:27 عصر
با سلام،

اگه براتون مقدوره در قالب یک Table و با یک مثال همراه کدش توضیح بدید واقعاً ممنون میشم.

حق با شماست اشتباه از من بود.
ممنون از لطفتون.
با تشکر.

دوست عزیز دستوری که دوستمون نوشتن هم کار می کنه به هر حال هر دو جواب میدن فکرها با هم فرق می کنند هر کس هم یکی دو روش به ذهنش میرسه

زمانی که شما از دستور DISTINCT استفاده می کنید رکوردهای تکراری و کاملا مشابه رو حذف می کنه


موفق باشید