-
فوری++++ کوئری خاص
سلام
من کوئری زیر (توضیحات در عکس) رو میخام بگیرم ولی موندم
اول خواستم DISTINCT بگیرم براساس نام که غیرتکراری رو نشون نده و بعد بیام SUM بگیرم ولی خطا میخورم
بعد خواستم از WITH MyBigProducts استفاده کنم توش موندم و چندتا چیز دیگم به فکرم رسید که به جواب نرسیدم......
http://upload7.ir/imgs/2014-09/51798146813171318853.png
-
نقل قول: فوری++++ کوئری خاص
بهتره اطلاعات رو توسط group by گروه بندی کنی و بعد رو هر گروه محاسباتی رو که میخوای روی فیلدهاش انجام بدی و خروجی رو برای هر گروه تک سطر بگیری.
-
نقل قول: فوری++++ کوئری خاص
درود بر شما
باید اینجور بشه:
SELECT name,SUM(bed) as BES,sum(bes) as BES, sum(bed)-sum(bes) as vaziyat FROM FN.Table1 group by Name;
-
نقل قول: فوری++++ کوئری خاص
ممنون از پاسختون
تو جدول من یک فیلد دیگه بنام شناسه ( ID ) هم هست
زمانی گه میخام براساس آخر به اول مرتب کنم
یا زمانیکه میخام با توجه به نام طرف شمارشو در بیارم (join) به خطا میخورم
آیا میشه از جواب کوئری دوباره کوئری نوشت؟
بدین ترتیب که با توجه به هرنام در هر سطر من سلکتی از جدول دیگه بگیرم ؟؟
-
نقل قول: فوری++++ کوئری خاص
آره
select * from (select * from table)
-
نقل قول: فوری++++ کوئری خاص
ممنون از پاسختون
بله درسته ولی اون حالت کلی هست
ینی مثلا همچین دستوری......
SELECT NAME,SEN , (select tel from Tmoshakhasat where name= & current_Row_cell [0] ) FROM TSTU
-
نقل قول: فوری++++ کوئری خاص
برای هر فیلد یه query نمیشه گرفت، اما شما می تونید کوئری رو به صورت function بنویسید و اینطور مسئله رو حل کنید:
SELECT NAME,SEN ,dbo.fnGetMoshtarakByName('ali') FROM TSTU
fnGetMoshrakByName یه تابع هست که مقدار رشته ای نام رو میگیره و در صورت موجود بودن شماره تلفن و در غیر اینصورت عدد صفر رو بر می گردونه.
-
نقل قول: فوری++++ کوئری خاص
select id,name,sum(bed)as bedSum,sum(bes) as besSum,sum(bed)-sum(bes) as result from sample
group by name
order by id desc
حالت کلی باید این باشه. شما برای چی آی دی رو میخوای؟ function هم خوبه اما الان اکثرا بار رو از پایگاه داده برمیدارن و میذارن رو زبونای برنامه نویسی
-
نقل قول: فوری++++ کوئری خاص
اتفاقا با نظر شما مخالفم علی آقا ali.shahrivarian
سرعت تو پایگاه داده فوق العادس
الان برا همین سوال من ، اگه بتونم کوئریشو بنویسم لازم نیست یک خط 1000 بار تکرار بشه
آخ که اگه بشه عالی میشه و واقعااا ممنون ازتون...
آقای mohammad reza beizavi میشه سمپلی بزارید من سردربیارم ازش؟؟
-
نقل قول: فوری++++ کوئری خاص
درسته که سرعت تو پایگاه داده بالاست اما ما برای مقیاس های کم مقایسه رو انجام نمیدیم. اگر به اطلاعات بالا و تراکنش های بالا نگاه کنیم میبینیم که اجرا شدن یک تابع در زبانی مثل سی شارپ میتونه بهتر از پایگاه داده جواب بده. البته این نظر من هست.
-
نقل قول: فوری++++ کوئری خاص
نمونه function:
CREATE FUNCTION [dbo].[fnGetMoshtarakByName]
(
@name nvarchar(15)
)
RETURNS nvarchar(15)
AS
BEGIN
DECLARE @tel AS NVARCHAR(15)
IF(EXISTS(SELECT tel FROM [Tmoshakhasat] WHERE [Tmoshakhasat].name=@name))
BEGIN
SET @tel = (SELECT tel FROM Tmoshakhasat WHERE Tmoshakhasat.name=@name);
END
ELSE
BEGIN
SET @tel = '0';
END
return @tel;
END
لطفا اگر جوابتون مربوز به پست خاصی هست از "پاسخ با نقل قول" استفاده کنید
-
نقل قول: فوری++++ کوئری خاص
نقل قول:
نوشته شده توسط
modern_amin
اتفاقا با نظر شما مخالفم علی آقا ali.shahrivarian
سرعت تو پایگاه داده فوق العادس
الان برا همین سوال من ، اگه بتونم کوئریشو بنویسم لازم نیست یک خط 1000 بار تکرار بشه
باید عرض کنم که طبق آخرین مستندات مایکروسافت برای C# 4.5 و sql 2012 , 2014 سرعت اجرای کد در این برنامه ها بسیار به هم نزدیک بوده و تفاوت چندانی ندارند. با استفاده از کوئری که البته از function هم برای گرفتن result کوئری میگیره به ازای هر فیلد یک کوئری دیگه به سمت engine بانک اطلاعاتی میره.
اما مزیت استفاده از sp و function اینه که بار هر قسمت از برنامه به دوش مسئول مستقیم خودشه(یعنی بانک اطلاعاتی) و از اون مهمتر تعداد و حجم ارجاعات از برنامه به بانک اطلاعاتی کم میشه
-
نقل قول: فوری++++ کوئری خاص
ممنون از پاسختون بچه هااا
بنظرم این دستور اگه استفاده شه سرعت برنامه هایی که کوئری هاشون یکمقدار خاص تر هست خیلی بالا میره.....
آقای ali.shahrivarian دستوری که دادید درسته فقط زمانی که جداول رو بنده join میدم یا از یک فیلد غیرتکراری استفاده میکنم جواب غلط میده ، البته اگه رو یک جدول فقط بخاهیم کار کنیم مناسبه...
آقای mohammad reza beizavi ممنون بابت راهنمایی ، بنظرم همین باید باشه ، اونچیزی که تو ذهنه منه خیلی به این نزدیکه.... :تشویق::تشویق:
در ضمن آقای mohammad reza beizavi مشکل در سرعت نیست ،در تعداد دفعات تکراره ....
آقای ali.shahrivarian اگه بشه یک جواب رو با یک تابع در اس کیوال گرفت چرا باید چندین ارسال پارامتر توسط مثلا برنامه مثل سی شارپ به sql انجام بشه؟
-
نقل قول: فوری++++ کوئری خاص
نقل قول:
نوشته شده توسط
mohammad reza beizavi
باید عرض کنم که طبق آخرین مستندات مایکروسافت برای C# 4.5 و sql 2012 , 2014 سرعت اجرای کد در این برنامه ها بسیار به هم نزدیک بوده و تفاوت چندانی ندارند. با استفاده از کوئری که البته از function هم برای گرفتن result کوئری میگیره به ازای هر فیلد یک کوئری دیگه به سمت engine بانک اطلاعاتی میره.
اما مزیت استفاده از sp و function اینه که بار هر قسمت از برنامه به دوش مسئول مستقیم خودشه(یعنی بانک اطلاعاتی) و از اون مهمتر تعداد و حجم ارجاعات از برنامه به بانک اطلاعاتی کم میشه
تو entity وقتی میخوایم از Sql اطلاعات رو فراخوانی کنیم یک کانکشن ساخته میشه و اطلاعات برگشت داده میشه و اگر از خصوصیاتی مثل list استفاده کنیم دیگه برای تغییر یا جستجو در اطلاعات فراخوانی شده نیازی به جستجوی دوباره در پایگاه نیست و تمام تغییرات درون خود برنامه سی شارپ انجام میشه. این یک مزیت محسوب میشه و جلوی کوئری های بی دلیل رو میگیره.
-
نقل قول: فوری++++ کوئری خاص
نقل قول:
نوشته شده توسط
ali.shahrivarian
تو entity وقتی میخوایم از Sql اطلاعات رو فراخوانی کنیم یک کانکشن ساخته میشه و اطلاعات برگشت داده میشه و اگر از خصوصیاتی مثل list استفاده کنیم دیگه برای تغییر یا جستجو در اطلاعات فراخوانی شده نیازی به جستجوی دوباره در پایگاه نیست و تمام تغییرات درون خود برنامه سی شارپ انجام میشه. این یک مزیت محسوب میشه و جلوی کوئری های بی دلیل رو میگیره.
تویEntity framework که نه ولی توی LINQ اینکار برای این یک بار انجام میشه که معمولا تمام اطلاعات یک جدول رو cach میکنه و برای اینکه مشکلات این روش رو ببینید یک بار با نرم افزار یا سایتی که استفاده کننده زیادی داره امتحان کنید. فشار آوردن به سرور (در وب) و یا سیستم کلاینت با توجه به اینکه سرورهای قدرتمندی برای کار دیتابیس وجود داره اندکی غیر منطقی به نظر می رسه.
البته اگر داکیومنتهای microsoft در زمینه Entity farmework رو بخونید خواهید دید که تمام کوئری های درون entity ها به sp تبدیل میشن و درون خود پایگاه داده اجرا شده و نتیجه برگشت داده میشه.
-
نقل قول: فوری++++ کوئری خاص
نقل قول:
نوشته شده توسط
modern_amin
آقای ali.shahrivarian اگه بشه یک جواب رو با یک تابع در اس کیوال گرفت چرا باید چندین ارسال پارامتر توسط مثلا برنامه مثل سی شارپ به sql انجام بشه؟
همونطور که گفتم میشه اطلاعات رو در یک بار فراخوانی در برنامه نگه داشت و تغییرات رو اعمال کرد و آخر سر تغییرات رو ذخیره کرد.
-
نقل قول: فوری++++ کوئری خاص
نقل قول:
نوشته شده توسط
mohammad reza beizavi
تویEntity framework که نه ولی توی LINQ اینکار برای این یک بار انجام میشه که معمولا تمام اطلاعات یک جدول رو cach میکنه و برای اینکه مشکلات این روش رو ببینید یک بار با نرم افزار یا سایتی که استفاده کننده زیادی داره امتحان کنید. فشار آوردن به سرور (در وب) و یا سیستم کلاینت با توجه به اینکه سرورهای قدرتمندی برای کار دیتابیس وجود داره اندکی غیر منطقی به نظر می رسه.
البته اگر داکیومنتهای microsoft در زمینه Entity farmework رو بخونید خواهید دید که تمام کوئری های درون entity ها به sp تبدیل میشن و درون خود پایگاه داده اجرا شده و نتیجه برگشت داده میشه.
توی linq خودش دیتاها رو cach میکنه اما تو entity اگر به list تبدیل نکنید برای هر بار فراخوانی entity دستورات sp اجرا میشن اما همونطور که گفتم اگر به لیست تبدیل بشن تمام تغییرات درون برنامه ای میشن و دیگه به پایگاه کاری نداریم.
-
نقل قول: فوری++++ کوئری خاص
البته آقا محمدرضا تو دنیای امروز که همه ی مسائل با هم مرتبط هستند شما چه کدهات رو درون پایگاه بنویسی چه درون برنامه هیچ تضمینی نیست که اطلاعاتی که یک کاربر تغییر میده براش ثابت بمونه. برای این موضوع باید روش ها و الگوریتمهای جایگزین ارائه بشه و این ایراد entity یا sql نیست.
-
نقل قول: فوری++++ کوئری خاص
نقل قول:
نوشته شده توسط
ali.shahrivarian
اما همونطور که گفتم اگر به لیست تبدیل بشن تمام تغییرات درون برنامه ای میشن و دیگه به پایگاه کاری نداریم.
و اینکه تمام اطلاعات رو کلاینت برنامه های دسکتاپ یا سرور میزبان وب پیش خودش نگه داره و روشون کار انجام میده از نظر شما مزیته؟!!!:متفکر::متفکر:
-
نقل قول: فوری++++ کوئری خاص
نقل قول:
نوشته شده توسط
ali.shahrivarian
تو دنیای امروز که همه ی مسائل با هم مرتبط هستند شما چه کدهات رو درون پایگاه بنویسی چه درون برنامه هیچ تضمینی نیست که اطلاعاتی که یک کاربر تغییر میده براش ثابت بمونه. برای این موضوع باید روش ها و الگوریتمهای جایگزین ارائه بشه و این ایراد entity یا sql نیست.
من کلا منظور این قسمت رو متوجه نشدم، مگه باید تضمینی برای اطلاعاتی که یک کاربر تغییر میده وجود داشته باشه و یا اطلاعات ثابت بمونه.
و یه نکته در کل تکنولوژی ها هرچند کامل نیستند اما ابزار مناسبی هستن اگه ازشون به درستی استفاده بشه چه linq و چه sql و یا هر تکنولوژی دیگه ای.
-
نقل قول: فوری++++ کوئری خاص
نقل قول:
نوشته شده توسط
mohammad reza beizavi
و اینکه تمام اطلاعات رو کلاینت برنامه های دسکتاپ یا سرور میزبان وب پیش خودش نگه داره و روشون کار انجام میده از نظر شما مزیته؟!!!:متفکر::متفکر:
ببخشید منظورمو درست نرسوندم.
منظورم اینه که برای یک تغییر کوچیک یا فراخونی و ارسال اطلاعات برای کلاینت نیازی نیست که تمام بار رو به دوش پایگاه داده بزاریم.
البته این میتونه مزیت باشه چون اگر به سایت هایی که الان کار می کنند نگاه کنید هر کاربر اطلاعاتش با کد کاربری خودش ذخیره میشه و اطلاعات عمومی رو مدیر سایت تغییر میده نه کاربر.
شما سایتی رو دیدید که اجازه بده تمام کاربرا تو یک لحظه یک صفحه رو تغییر بدن؟
شاید مثال درستی نباشه اما همین صفحه رو نگاه کنید! من نمیتونم اطلاعات شما رو تغییر بدم و شما هم نمیتونید اطلاعات من رو تغییر بدید!!!
این مسئله برای سیستم هایی مثل حسابداری مهمه که در هر لحظه باید با هر بخش در ارتباط باشن و اطلاعات RealTime تغییر میکنه. اینها هم نمیان هر لحظه با پایگاه کار کنن(البته سیستمای کوچیک مستثنی هستند).اطلاعات میتونه درون فایلهای xml باشه یا اینکه پایگاه پشتیبانی وجود داشته باشه که تک تک تغییرات رو با زمانشون ذخیره کنه تا مشکلی بوجود نیاد. اینها دیگه مسئله زمانبندیه.
-
نقل قول: فوری++++ کوئری خاص
نقل قول:
نوشته شده توسط
mohammad reza beizavi
من کلا منظور این قسمت رو متوجه نشدم، مگه باید تضمینی برای اطلاعاتی که یک کاربر تغییر میده وجود داشته باشه و یا اطلاعات ثابت بمونه.
و یه نکته در کل تکنولوژی ها هرچند کامل نیستند اما ابزار مناسبی هستن اگه ازشون به درستی استفاده بشه چه linq و چه sql و یا هر تکنولوژی دیگه ای.
منظورم اینه که ممکنه چند کاربر بر روی یک تاپل کار کنن و این موضوع مشکلاتی رو در پی داره.
بخش دوم حرفتون رو هم قبول دارم.
-
نقل قول: فوری++++ کوئری خاص
نقل قول:
نوشته شده توسط
ali.shahrivarian
ببخشید منظورمو درست نرسوندم.
منظورم اینه که برای یک تغییر کوچیک یا فراخونی و ارسال اطلاعات برای کلاینت نیازی نیست که تمام بار رو به دوش پایگاه داده بزاریم.
البته این میتونه مزیت باشه چون اگر به سایت هایی که الان کار می کنند نگاه کنید هر کاربر اطلاعاتش با کد کاربری خودش ذخیره میشه و اطلاعات عمومی رو مدیر سایت تغییر میده نه کاربر.
شما سایتی رو دیدید که اجازه بده تمام کاربرا تو یک لحظه یک صفحه رو تغییر بدن؟
شاید مثال درستی نباشه اما همین صفحه رو نگاه کنید! من نمیتونم اطلاعات شما رو تغییر بدم و شما هم نمیتونید اطلاعات من رو تغییر بدید!!!
این مسئله برای سیستم هایی مثل حسابداری مهمه که در هر لحظه باید با هر بخش در ارتباط باشن و اطلاعات RealTime تغییر میکنه. اینها هم نمیان هر لحظه با پایگاه کار کنن(البته سیستمای کوچیک مستثنی هستند).اطلاعات میتونه درون فایلهای xml باشه یا اینکه پایگاه پشتیبانی وجود داشته باشه که تک تک تغییرات رو با زمانشون ذخیره کنه تا مشکلی بوجود نیاد. اینها دیگه مسئله زمانبندیه.
فکر می کنم شما یه سری مسائل رو که جز بدیهیات و وظایف بانک اطلاعاتی هست (ماندد جلوگیری از همزمانی با تکنیکهایی مانند Lock table و lock row)، فراموش کردید. این checking ها رو خود دیتابیس انجام میده، و نیازی به مدیریت توسط مدیر سایت و برنامه نداره.
آقا بحثمون داره به دارازا میکشه و شاید بینندگان سایت رو خسته کنه. من از چت روم یا امکانات دیگه ای که برای بحث دونفره توی سایت باشه خبر ندارم. اگر میدونید چیزی بگید تا اونجا به بحثمون ادامه بدیم
-
نقل قول: فوری++++ کوئری خاص
نقل قول:
نوشته شده توسط
mohammad reza beizavi
فکر می کنم شما یه سری مسائل رو که جز بدیهیات و وظایف بانک اطلاعاتی هست (ماندد جلوگیری از همزمانی با تکنیکهایی مانند Lock table و lock row)، فراموش کردید. این checking ها رو خود دیتابیس انجام میده، و نیازی به مدیریت توسط مدیر سایت و برنامه نداره.
آقا بحثمون داره به دارازا میکشه و شاید بینندگان سایت رو خسته کنه. من از چت روم یا امکانات دیگه ای که برای بحث دونفره توی سایت باشه خبر ندارم. اگر میدونید چیزی بگید تا اونجا به بحثمون ادامه بدیم
:قهقهه: راست میگی. بینندگان گرامی از شما پوزش میطلبیم.
من تو یاهو تو زمان کاریم آنلاینم.
-
نقل قول: فوری++++ کوئری خاص
داشتین استفاده میکردیم....
من فقط دوتا سوال داشتم نخاستم بپرم وسط حرفتون...
---با کمک شما کوئری رو نوشتم همونیه که میخاستم
فقط بعد اجرا و نمایش سطرهای اولی بعد یک ثانیه خطا میده که نمیتونه رشته رو تبدیل به عدد کنه....
یکمقدار روش کار کردم ولی همچنان این خطای ریز رو میده
--- تو اس کیوال 2008 آر2
باید روی -scalar valued function ساخت؟ درسته؟
یا توی inline table و یا multi statement ؟؟
یا روی
-
نقل قول: فوری++++ کوئری خاص
نقل قول:
نوشته شده توسط
modern_amin
فقط بعد اجرا و نمایش سطرهای اولی بعد یک ثانیه خطا میده که نمیتونه رشته رو تبدیل به عدد کنه....
یکمقدار روش کار کردم ولی همچنان این خطای ریز رو میده
--- تو اس کیوال 2008 آر2
باید روی -scalar valued function ساخت؟ درسته؟
یا توی inline table و یا multi statement ؟؟
یا روی
Scalar Valued function درسته، اما اونکه error میده به خاطر کوئری که داخل function انجام میدید، مثلا اینکه یه رشته مثل '2_' رو بخواید به عدد تبدیل کنید.
اگه جزییات بیشتری بدید بهتر میشه نظر داد.