PDA

View Full Version : درخواست كمك براي يك كوئري



arsalansalar
دوشنبه 18 آبان 1388, 10:30 صبح
يك بانك اطلاعاتي كه داراي 1000 ركورد مربوط به مراجعات افراد به يك كلينيك است وجود دارد.در اين بانك هر فرد بين 2 تا سه بار مراجعه كرده است.
مي خواستم ببينم با چه كدي يك كوئري بنويسم كه نام هر فرد فقط يك بار در ديتا گريد نمايش داده شود.
مثلا اگر محمدي 3 بار هم مراجعه كرده است فقط يك بار نمايش داده شود.

majid325
دوشنبه 18 آبان 1388, 13:29 عصر
باید روی فیلد unicode عملیات Distinct رو انجام بدین.

SAMARE
دوشنبه 18 آبان 1388, 13:33 عصر
میشه بیشتر توضیح بدید؟؟؟

محمد سلیم آبادی
دوشنبه 18 آبان 1388, 13:40 عصر
در واقع برای خلاصه سازی اطلاعات دو راه وجود دارد:
1. Grouping (گروه بندی)
2. استفاده از کلیدواژه ی Distinct.

بطول مثال می خواهیم لیست افراد را از جدول مراجعات بیمار بدست آوریم و از آنجایی که ممکن است یک بیمار چند بار ویزیت شده باشد از distinct بلافاصله بعد از Select استفاده می کنیم.
بطور پیشفرض select تمام داده ها (سطرهای) تکراری را بر می گرداند یعنی از کلید واژه ی All استفاده می کند.



Select Distinct Name
From Visits

SAMARE
دوشنبه 18 آبان 1388, 13:49 عصر
ممنون دوست عزیز
جواب رو میدونم
منظورم این بود که اگر این فیلد name با حروف الفبای فارسی پر شده باشه به مشکل برمیخوره و داده تکراری هم برمیگردونه!!!
تکلیف چیه؟؟؟

محمد سلیم آبادی
دوشنبه 18 آبان 1388, 13:55 عصر
اگر از نوع داده ی 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)
*/

pourang_us
دوشنبه 18 آبان 1388, 14:00 عصر
دوست عزیز سلام

این جور موارد بیشتر مواقعی رخ میده که شما در طراحی اولیه بانک اطلاعاتی خودت یک سری از موارد رو رعایت نکرده باشی مثلا در ایم مورد شما میتونستی اطلاعات مربوط به افراد رو در یک جدول نگهداری کنی و بعد در یک جدول دیگر با استفاده از کلید اصلی مراجعات رو ثبت بکنی. در این حالت علاوه بر رفع نیاز شما در این مورد از دخیره اطلاعات بیمورد در بانک که موجی رشد حجم بانکت میشه جلو گیری میکردی و ضمن اینکه در صورت نیاز به اصلاح نام یک بیمار فقط برای اصلاح در یک جای بانک نسبت به این امر مبادرت میکردی

اما در مورد رفع این مساله من استفاده از Group By رو پیشنهاد میدم اما چون نمیدونم ساختار جدول شما به چه شکل هست نمیدونم این دستور کمکت بکنه یا نه در صورت تمایل فیلدهای جدولت رو به همراه فیلد های مورد نظر در دیتا گرید بگو شاید بهتر بشه روی مساله فکر کرد


موفق باشی

SAMARE
دوشنبه 18 آبان 1388, 14:09 عصر
دوست عزیز از پاسخ تون ممنونم
استارتر این تاپیک من نیستم مشکل من چیز دیگه ای هست که براش تاپیک زدم ولی متاسفانه کسی جواب نداد
من سوالم رو اینجا دوباره مطرح میکنم امیدوارم کمکم کنید

نمیدونم برای انتخاب رکوردهای غیرتکراری از یک جدولی که بر اساس فیلد تاریخ میلادی بصورت نزولی مرتب شده از چه کوئری باید استفاده کنم!!!

mn_zandy63
سه شنبه 19 آبان 1388, 22:13 عصر
سلام دوست من، کلمه کلیدی Distinct بعد از Select باعث میشه که سطرهای تکراری حذف شه.
اما دقت کن، سطر های تکراری، یعنی سطرهایی که همه فیلدهاشون با هم برابر باشه.
و این موضوع هیچ ارتباطی با فارسی بودن یا نبودن اطلاعات شما نداره.

شما بهتره، یک نمونه از Query که داری میزنی رو اینجا بنویسی، تا دوستان بهت بگن چه شکلی میتونی تکراری ها رو حذف کنی.

موفق باشی

SAMARE
چهارشنبه 20 آبان 1388, 10:29 صبح
من توی جدولم تاریخ رو بصورت ( فروردین 1388) ذخیره کردم و میخواستم که رکوردهایی که دارای فیلد مشابه هستند تکرار نشوند مثلا اگه چند تا خبر با تاریخ شمسی فروردین 1388 داشته باشم فقط یکی از اونها برگردونده بشه ولی انگار sql با حرف (ی) مشکل داره و نمیتونه فیلد های تکراری رو حذف کنه!!!
این مشکل منه!!!

happy65_sh
چهارشنبه 20 آبان 1388, 11:29 صبح
ولی انگار sql با حرف (ی) مشکل داره
فكرنكنم باتوجه به اينكه گفتيد:

چند تا خبر با تاریخ شمسی فروردین 1388 داشته باشم

اما دقت کن، سطر های تکراری، یعنی سطرهایی که همه فیلدهاشون با هم برابر باشه.

يعني تمام فيلد هات يكسان نيستند پس Distinct به درد شما نميخوره.شما خودت بايد اين موضوع را در شرطتت چك كني.مثلا:

select top 1 from Table where date=date

azadehsr
چهارشنبه 20 آبان 1388, 13:18 عصر
باید روی فیلد unicode عملیات Distinct رو انجام بدین.

به نظر من سوال این دوستمون به چندتا چیز بستگی داره اولا که برنامه چه جدولهایی داره ثانیا چه اطلاعاتی قراره نمایش داده بشه.
و اینکه می شه یه توضیح بدید که فیلد unicode چیه؟
ممنون