درخواست كمك براي يك كوئري
يك بانك اطلاعاتي كه داراي 1000 ركورد مربوط به مراجعات افراد به يك كلينيك است وجود دارد.در اين بانك هر فرد بين 2 تا سه بار مراجعه كرده است.
مي خواستم ببينم با چه كدي يك كوئري بنويسم كه نام هر فرد فقط يك بار در ديتا گريد نمايش داده شود.
مثلا اگر محمدي 3 بار هم مراجعه كرده است فقط يك بار نمايش داده شود.
نقل قول: درخواست كمك براي يك كوئري
باید روی فیلد unicode عملیات Distinct رو انجام بدین.
نقل قول: درخواست كمك براي يك كوئري
نقل قول: درخواست كمك براي يك كوئري
در واقع برای خلاصه سازی اطلاعات دو راه وجود دارد:
1. Grouping (گروه بندی)
2. استفاده از کلیدواژه ی Distinct.
بطول مثال می خواهیم لیست افراد را از جدول مراجعات بیمار بدست آوریم و از آنجایی که ممکن است یک بیمار چند بار ویزیت شده باشد از distinct بلافاصله بعد از Select استفاده می کنیم.
بطور پیشفرض select تمام داده ها (سطرهای) تکراری را بر می گرداند یعنی از کلید واژه ی All استفاده می کند.
Select Distinct Name
From Visits
نقل قول: درخواست كمك براي يك كوئري
ممنون دوست عزیز
جواب رو میدونم
منظورم این بود که اگر این فیلد name با حروف الفبای فارسی پر شده باشه به مشکل برمیخوره و داده تکراری هم برمیگردونه!!!
تکلیف چیه؟؟؟
نقل قول: درخواست كمك براي يك كوئري
اگر از نوع داده ی nvarchar یعنی unicode variable character استفاده کنید نباید مشکلی وجود داشته باشد.
بطور مثال:
declare @a table (c nvarchar(10))
insert into @a values (N'محمد')
insert into @a values (N'محمد')
select * from @a
/*
c
----------
محمد
محمد
(2 row(s) affected)
*/
select distinct * from @a
/*
c
----------
محمد
(1 row(s) affected)
*/
نقل قول: درخواست كمك براي يك كوئري
دوست عزیز سلام
این جور موارد بیشتر مواقعی رخ میده که شما در طراحی اولیه بانک اطلاعاتی خودت یک سری از موارد رو رعایت نکرده باشی مثلا در ایم مورد شما میتونستی اطلاعات مربوط به افراد رو در یک جدول نگهداری کنی و بعد در یک جدول دیگر با استفاده از کلید اصلی مراجعات رو ثبت بکنی. در این حالت علاوه بر رفع نیاز شما در این مورد از دخیره اطلاعات بیمورد در بانک که موجی رشد حجم بانکت میشه جلو گیری میکردی و ضمن اینکه در صورت نیاز به اصلاح نام یک بیمار فقط برای اصلاح در یک جای بانک نسبت به این امر مبادرت میکردی
اما در مورد رفع این مساله من استفاده از Group By رو پیشنهاد میدم اما چون نمیدونم ساختار جدول شما به چه شکل هست نمیدونم این دستور کمکت بکنه یا نه در صورت تمایل فیلدهای جدولت رو به همراه فیلد های مورد نظر در دیتا گرید بگو شاید بهتر بشه روی مساله فکر کرد
موفق باشی
نقل قول: درخواست كمك براي يك كوئري
دوست عزیز از پاسخ تون ممنونم
استارتر این تاپیک من نیستم مشکل من چیز دیگه ای هست که براش تاپیک زدم ولی متاسفانه کسی جواب نداد
من سوالم رو اینجا دوباره مطرح میکنم امیدوارم کمکم کنید
نمیدونم برای انتخاب رکوردهای غیرتکراری از یک جدولی که بر اساس فیلد تاریخ میلادی بصورت نزولی مرتب شده از چه کوئری باید استفاده کنم!!!
نقل قول: درخواست كمك براي يك كوئري
سلام دوست من، کلمه کلیدی Distinct بعد از Select باعث میشه که سطرهای تکراری حذف شه.
اما دقت کن، سطر های تکراری، یعنی سطرهایی که همه فیلدهاشون با هم برابر باشه.
و این موضوع هیچ ارتباطی با فارسی بودن یا نبودن اطلاعات شما نداره.
شما بهتره، یک نمونه از Query که داری میزنی رو اینجا بنویسی، تا دوستان بهت بگن چه شکلی میتونی تکراری ها رو حذف کنی.
موفق باشی
نقل قول: درخواست كمك براي يك كوئري
من توی جدولم تاریخ رو بصورت ( فروردین 1388) ذخیره کردم و میخواستم که رکوردهایی که دارای فیلد مشابه هستند تکرار نشوند مثلا اگه چند تا خبر با تاریخ شمسی فروردین 1388 داشته باشم فقط یکی از اونها برگردونده بشه ولی انگار sql با حرف (ی) مشکل داره و نمیتونه فیلد های تکراری رو حذف کنه!!!
این مشکل منه!!!
نقل قول: درخواست كمك براي يك كوئري
نقل قول:
ولی انگار sql با حرف (ی) مشکل داره
فكرنكنم باتوجه به اينكه گفتيد:
نقل قول:
چند تا خبر با تاریخ شمسی فروردین 1388 داشته باشم
نقل قول:
اما دقت کن، سطر های تکراری، یعنی سطرهایی که همه فیلدهاشون با هم برابر باشه.
يعني تمام فيلد هات يكسان نيستند پس Distinct به درد شما نميخوره.شما خودت بايد اين موضوع را در شرطتت چك كني.مثلا:
select top 1 from Table where date=date
نقل قول: درخواست كمك براي يك كوئري
نقل قول:
نوشته شده توسط
majid325
باید روی فیلد unicode عملیات Distinct رو انجام بدین.
به نظر من سوال این دوستمون به چندتا چیز بستگی داره اولا که برنامه چه جدولهایی داره ثانیا چه اطلاعاتی قراره نمایش داده بشه.
و اینکه می شه یه توضیح بدید که فیلد unicode چیه؟
ممنون