PDA

View Full Version : استفاده از دستور HAVING چطور



احمد سامعی
جمعه 31 شهریور 1385, 01:34 صبح
درود و صد بدرود بر مردمان ایران زمین
من یک جدول دارم که شماره بارنامه ها رو ثبت می کنه و از شماره 000001 شروع می شه و زمانی که رسید به 999999 باید کنتر برگرده دوباره از 000001 شروع کنه برای اینکه تداخل در شماره پیش نیاد یک فیلد دیگه هم گذاشتم که کد محسوب می شه و از یک شروع می شه و هر بار که شماره ها به انتها (999999) می رسه باید یکی به کداضافه بشه و شماره بارنامه هم که از 000001 شروع بشه
وقتی می خوای یک بارنامه جدیدی ثبت کنی باید اول از تو جدول آخرین کد و شماره رو select کنی برای همین باید هر دو ( کد و شماره ) باید ماکزیمم رو بگیری

با استفاده از having و تابع max خواستم اینکار رو بکنم اما ERRROR میدخ این هم دستورم


myCommand.CommandText="SELECT MAX(code),MAX(number) FROM mytable HAVING MAX(code) ";

آیا می شه روشه بهتری به کار برد در ضمن با روش من نمی شه فیلد کلیدی تعریف کرد که این ممکن مشکل درست کنه در تعداد بالا

حمیدرضاصادقیان
شنبه 01 مهر 1385, 08:24 صبح
دوست عزیز سلام. روش استفاده از دستور having در اینجا اشتباه است. زیرا دستور having مثل دستور Where میماند ولی برای group by استفاده میشود. همون تیکه اول رو تا قبل از having بگیر وبهتره این رو در یک procedure بنویسی.
موفق باشی
--------------------
دوست عزیز سلام. روش استفاده از دستور having در اینجا اشتباه است. زیرا دستور having مثل دستور Where میماند ولی برای group by استفاده میشود. همون تیکه اول رو تا قبل از having بگیر وبهتره این رو در یک procedure بنویسی.
موفق باشی

احمد سامعی
شنبه 01 مهر 1385, 16:35 عصر
[QUOTE=حمیدرضاصادقیان]دوست عزیز سلام. روش استفاده از دستور having در اینجا اشتباه است. زیرا دستور having مثل دستور Where میماند ولی برای group by استفاده میشود. همون تیکه اول رو تا قبل از having بگیر وبهتره این رو در یک procedure بنویسی.
موفق باشی[QUOTE=حمیدرضاصادقیان/]

ببخشید اما ساده تر می گم
اگه می شه کد دستور SELECT رو برام بنویسید من هر چی تو help , MSDN و کتاب ها ور رفتم از این procedure چیزی نفهمیدم

یک جدول داریم با دو تا فیلد int به نام c1 , c2 ( مثلاً به صورت زیر )


c1 c2
---------------------------------------------------
10 2
11 2
12 2
8 3
9 3
25 1

حالا می خواهیم رکوردی رو برای ما SELECT کند که هم فیلد c1 و هم c2 در بیشترین مقدار باشه و خروجی به شکل زیر باشه


-------------------------------------------
9 3
من از این کد استفاده کردم


SELECT MAX(c1) , MAX(c2) FROM mytable

و نتیجه خروجی زیر شد که اشتباه


---------------------------------------------
25 3
اگه می شه کد صحیح رو بگید

majid_afra222
شنبه 01 مهر 1385, 20:08 عصر
سلام
اگه سئوالت واقعا اینه
خوب Order By کفایت می کنه.


select top 1 c1, c2
from mytable
order by c1 desc, c2 desc