PDA

View Full Version : Sql Syntax فوری.



najeeb
یک شنبه 05 مهر 1383, 11:17 صبح
من دو جدول دارم که هردو دارای فیلدی بنام maqsad هستند و در کل نهایتا دو مقصد تهران و شیراز در دو جدول وارد میشه . حالا من این دو جدول را با هم join میکنم روی همین فیلد maqsad برای گروه بندی و ....
مشکل من اینه که اگر در دو جدول در فیلد maqsad برای هر دو شهر حدقل یک رکورد برای هرکدام ثبت شده باشد این join جواب میده و الا مثلا اگر برای جدول 1 شهر تهران ثبت شده باشد و برای جدول 2 شهر تهران و شیراز ثبت شده باشد در اینصورت وقتی من این join را انجام میدم که مثلا تعداد ماشینهای رفته شده به هر شهر را بدست بیارم ( گروه بندی ) اینجوری تعداد ماشینهای رفته شده به شیراز از جدول دو در نتیجه query نشان داده نمیشود.
در ضمن من نمیتوتم دو جدول رو یکی کنم و از AdoDataset و sql server استفاده میکنم. من از این join استفاده میکنم :

select ......... from table1 full outer join table2 on table1.city=table2.city

لطفا راهنمایی کامل با syntax

AminSobati
یک شنبه 05 مهر 1383, 12:21 عصر
دوست عزیزم لطفا این اطلاعات رو کامل کنید تا جواب قابل استفاده ای بشه داد:
1) جدول 1 و جدول 2 هر کدوم باید چه رکوردهایی (با چه هدفی) داشته باشن
2) Query شما دقیقا قراره چه گزارشی تامین کنه (صورت اصلی مساله)

چون معمولا احتمال این مشکل وجود داره که طراحی جداول مناسب نباشه و این منجر میشه به غیر انعطاف پذیر بودن سیستم برای تهیه گزارش.
ولی پیش فرض اینه که من سیستم شما رو نمیشناسم، نه اینکه طراحی شما اشکال داره (سوء تفاهم نشه!)

موفق باشین

hmm
یک شنبه 05 مهر 1383, 13:11 عصر
یک جدول را بیس قرار دهید و از left joine یا right joine استفاده کنید

najeeb
دوشنبه 06 مهر 1383, 08:24 صبح
من دو نوع ماشین ثبت میکنم در 2جدول که یکی کامیون ( چند تن و مقدار بار نوع و... ) و دیگری اتوبوس(ظرفیت و تعداد مسافر و..) هست و برای گزارشگیری ماهانه یا سالانه باید تعداد ماشینهای رفته شده به دو مقصد بدست بیاد. امین جان query من در موردی که در هر 2 جدول هر دو شهر ثبت شده باشه جواب میده ولی وقتی 1 شهر تو یکی ثبت هست موقع گزارشگیری در صورتی محاسبه میشه که در جدول مقابل هم این شهر ثبت باشه :|

select distinct l.maqsad,l.gmal,l.mal,count(distinct l.mosalsal) as Tir,sum(distinct l.mmal) as Ton,count(distinct b.mosalsal) as Tot_m from javazL AS l full outer join javazb AS b on l.maqsad=b.maqsad where l.year = '+edit1.Text+' and b.year = '+edit1.Text;
group by l.gmal,l.maqsad,l.mal order by gmal

AminSobati
سه شنبه 07 مهر 1383, 00:16 صبح
1) علت اینکه سفرهای رفته شده رو در 2 جدول جدا ثبت میکنین چیه؟
2) Distinct در اینجا چه وظیفه ای داره؟
اگر درست متوجه شده باشم اینجا 4 جدول نقش دارن: 2 جدول برای دو نوع ماشین و دو جدول برای 2 مقصد؟
اگر بتونین Script ساخت جداول رو اینجا بگذارین تا دقیقتر از ساختار اونها با خبر بشیم کمک بزرگی در پیدا کردن راه حل انجام دادین. متاسفانه ما از وسط کار به شما ملحق شدیم و اطلاعاتمون در مورد سناریو خیلی کمه!

najeeb
سه شنبه 07 مهر 1383, 10:05 صبح
distinctطرهای تکراری رو خذف میکنه
چون فیلدهای مختلف دارن در 2 جئول ثبت میشه
اینجا فقط 2 جدول نقش دارن.

AminSobati
سه شنبه 07 مهر 1383, 16:09 عصر
نجیب عزیز،
چون اطلاعات شمارش (Count) رو از دو جدول باید استخراج کنین، به این صورت عمل کنین. اول یک Query برای شمارش سفرها از جدول 1:


select city,count(city) as 'tedad' from table1 group by city

بعد شمارش از جدول دوم:


select city,count(city) from table2 group by city

حالا نتیجه این دو Query رو یکی میکنیم:


select city,count(city) as 'tedad' from table1 group by city
union all
select city,count(city) from table2 group by city

از این نتیجه به عنوان Sub Query استفاده میکنیم برای Query اصلی:


select city, sum(tedad) from
(select city,count(city) as 'tedad' from table1 group by city
union all
select city,count(city) from table2 group by city) as tmp
group by city

این Query فقط مجموع مسافرتهای انجام شده رو برمیگردونه. من به نظرم میرسه در Query که شما نوشته بودین، دارین چند تا کار رو همزمان انجام میدین و شاید این نتیجه مورد نظرتون رو تامین نمیکرده.
ضمنا فیلد City در مثال من، مترادف مقصد در جداول شماست.
موفق باشید

najeeb
چهارشنبه 08 مهر 1383, 08:20 صبح
مرسی امین جان..... ممنون :flower:

AminSobati
چهارشنبه 08 مهر 1383, 10:45 صبح
موفق باشین