بسم الله الرحمن الرحیم
دوستان سلام
من یک کد SQL می خواهم که مقادیر تکراری را در یک جدول نشان دهد.
به عنوان مثال مشتریانی که بیش از یکبار در یک محدوده زمانی خاص مراجعه داشته اند نشان داده شود.
متشکرم
بسم الله الرحمن الرحیم
دوستان سلام
من یک کد SQL می خواهم که مقادیر تکراری را در یک جدول نشان دهد.
به عنوان مثال مشتریانی که بیش از یکبار در یک محدوده زمانی خاص مراجعه داشته اند نشان داده شود.
متشکرم
سلام.
دوست عزيز مشخصه ي اين مشتريان چيست؟ مثلاً كد اشتراكي چيزي ندارند؟
اما چيزي كه بايد دقت كنيد اين هست كه طراحي 1 ديتابيس خوب برنامه ي شما رو بهتر و كد نويسيتونو آسونتر ميكنه. طبيعي ترين كار و عرف ترينش اينه كه هر مشتري براي بار اول بايد عضويت ايجاد كنه و كد اشتراك بگيره . خوب وقتي اينكارو ميكنيد ميتونيد جدول خريد هم اضافه كنيد كه در واقع كارشما آسونتر ميشه و ميتونيد كدهايي كه در جدول خريد بيش از 1بار ذخيره شدن با 1دستور ساده ي select بياريد.
موفق باشيد
بسم الله الرحمن الرحیم
دوست عزیز سلام از پاسخ شما متشکرم
مشخصات مشتریان در یک جدول بطور خودکار ثبت می شود ولی چون تعداد مشتریان زیاد است نمی توان تک تک بررسی کرد و ما هم نمی دانیم کدام مشتری بیش تر از یکبار مراجعه کرده است که همان را استخراج کنیم! اگر می دانستیم که مشکل حل بود.
ما در این جدول می خواهیم بدون دادن اطلاعات خاصی از یک مشتری رکوردهای تکراری را استخراج کنیم
با تقدیم احترام
ضمن عرض سلام فكر ميكنم كدهاي زير دو جواب شما باشد من هم خودم بارها از هر دوي اين روشها استفاده كردم و جواب گرفتم :
روش اول :
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)
درود :
با تشکر 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)
فکر خوش .
...select distinct code_kala from kala where
Select Count(Id) As Cnt From T1
Where F1=:F1 And F2=:F2 And F3=:F3 ...
.
.
.
IF FieldByName('Cnt').Asinteger > 1 Then
.... ركورد تكراري است
بسم الله الرحمن الرحیم
با سلام
من می خواهم این دستور بتواند این عمل را در یک محدوده زمانی خاص اعمال کند و کد را تغییر دادم ولی دستور درست کار نمی کند!
علت چیست؟
لطفاً راهنمایی نمائید.
متشکرم
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
درود :
این دستور بنا به اینکه شما فقط Cust_ID رو دستور انتخاب دادی اشتباه است .(HAVING (COUNT(Cust_ID) > 1))) and (date like 1388/10/10
استفاده از دستورات 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 برای تاریخ استفاده کنی .
فکر خوش .