PDA

View Full Version : سوال: نشان دادن مقادیر تکراری از یک جدول



drahmadtaraffoo
دوشنبه 06 اردیبهشت 1389, 20:26 عصر
بسم الله الرحمن الرحیم
دوستان سلام
من یک کد SQL می خواهم که مقادیر تکراری را در یک جدول نشان دهد.
به عنوان مثال مشتریانی که بیش از یکبار در یک محدوده زمانی خاص مراجعه داشته اند نشان داده شود.
متشکرم

M aJi D
سه شنبه 07 اردیبهشت 1389, 02:31 صبح
سلام.
دوست عزيز مشخصه ي اين مشتريان چيست؟ مثلاً كد اشتراكي چيزي ندارند؟
اما چيزي كه بايد دقت كنيد اين هست كه طراحي 1 ديتابيس خوب برنامه ي شما رو بهتر و كد نويسيتونو آسونتر ميكنه. طبيعي ترين كار و عرف ترينش اينه كه هر مشتري براي بار اول بايد عضويت ايجاد كنه و كد اشتراك بگيره . خوب وقتي اينكارو ميكنيد ميتونيد جدول خريد هم اضافه كنيد كه در واقع كارشما آسونتر ميشه و ميتونيد كدهايي كه در جدول خريد بيش از 1بار ذخيره شدن با 1دستور ساده ي select بياريد.
موفق باشيد

drahmadtaraffoo
سه شنبه 07 اردیبهشت 1389, 17:19 عصر
بسم الله الرحمن الرحیم
دوست عزیز سلام از پاسخ شما متشکرم
مشخصات مشتریان در یک جدول بطور خودکار ثبت می شود ولی چون تعداد مشتریان زیاد است نمی توان تک تک بررسی کرد و ما هم نمی دانیم کدام مشتری بیش تر از یکبار مراجعه کرده است که همان را استخراج کنیم! اگر می دانستیم که مشکل حل بود.
ما در این جدول می خواهیم بدون دادن اطلاعات خاصی از یک مشتری رکوردهای تکراری را استخراج کنیم
با تقدیم احترام

BATIS
سه شنبه 07 اردیبهشت 1389, 23:44 عصر
ضمن عرض سلام فكر ميكنم كدهاي زير دو جواب شما باشد من هم خودم بارها از هر دوي اين روشها استفاده كردم و جواب گرفتم :
روش اول :
SELECT * FROM QUERY1 Q1 WHERE SERIALNO IN ( SELECT SERIALNO FROM QUERY2 Q2 WHERE Q1.ID <> Q2.ID AND Q1.SERIALNO = Q2.SERIALNO)
كه درواقع QUERY1 , QUERY2 دو ارجاع مختلف به يك فايل هستند مثلا" فايل پرسنلي شما
و فيلدهاي SERIALNO و ID دو فيلد فرضي از بانك هستند يكي يونيك و غير قابل تكرار و ديگري تكراري
و اما روش دوم :
كه شماره سريالهاي ركوردهايي كه بيش از يكبار در بانك اطلاعاتي وجود داشته باشند را (برحسب امكان تكراري بودن شماره سريال (فيلد فرضي ما)) به شما ميدهد .
SELECT SERIALNO FROM QUERY1 GROUP BY SERIALNO HAVING (COUNT(*) > 1)

pezhvakco
چهارشنبه 08 اردیبهشت 1389, 08:39 صبح
درود :
با تشکر BATIS عزیز برای راه حل جالبش و کسب اجازه برای یه دستکاری کوچیک در کدهاش =>
" (شناسه خریدار : Cust_ID ) "
روش اولشون برای نمایش سطر های تکراری از یک خریدار =>


SELECT * FROM Table1
WHERE (Cust_ID IN (SELECT Cust_ID
FROM Table1 GROUP BY Cust_ID
HAVING (COUNT(Cust_ID) > 1)))

روش دومشون برای نمایش شماره خریدار و تعداد خرید اون اگر بیش از یک بار خرید داشته =>


SELECT Cust_ID, COUNT(Cust_ID) AS Expr1
FROM Table1 GROUP BY Cust_ID
HAVING (COUNT(Cust_ID) > 1)

فکر خوش .

saeed19
چهارشنبه 08 اردیبهشت 1389, 15:23 عصر
...select distinct code_kala from kala where

danesh1351
جمعه 10 اردیبهشت 1389, 09:47 صبح
Select Count(Id) As Cnt From T1
Where F1=:F1 And F2=:F2 And F3=:F3 ...
.
.
.

IF FieldByName('Cnt').Asinteger > 1 Then
.... ركورد تكراري است

drahmadtaraffoo
شنبه 11 اردیبهشت 1389, 19:44 عصر
بسم الله الرحمن الرحیم
با سلام
من می خواهم این دستور بتواند این عمل را در یک محدوده زمانی خاص اعمال کند و کد را تغییر دادم ولی دستور درست کار نمی کند!
علت چیست؟
لطفاً راهنمایی نمائید.
متشکرم


SELECT * FROM Table1
WHERE (Cust_ID IN (SELECT Cust_ID
FROM Table1 GROUP BY Cust_ID
(HAVING (COUNT(Cust_ID) > 1))) and (date like 1388/10/10

pezhvakco
یک شنبه 12 اردیبهشت 1389, 08:28 صبح
درود :

(HAVING (COUNT(Cust_ID) > 1))) and (date like 1388/10/10
این دستور بنا به اینکه شما فقط Cust_ID رو دستور انتخاب دادی اشتباه است .
استفاده از دستورات Group By , Having دارای قانون است مبنی بر این که فقط ستونی که در دستور انتخاب هست در دستور Group و Having باید باشد .

می تونی از کد زیر برای کارت استفاده کنی >


SELECT * FROM Table1
WHERE (Cust_ID IN (SELECT Cust_ID FROM Table1
GROUP BY Cust_ID HAVING COUNT(Cust_ID) > 1))
AND (tarikh LIKE '1388/01/01')

یا اینکه در همون کد خودت از دستور WHERE برای تاریخ استفاده کنی .

فکر خوش .