PDA

View Full Version : سوال: استفاده از دستور if در كوئري



ahmad1358
جمعه 22 شهریور 1387, 10:35 صبح
با سلام
من يه كوئري ساختم كه با Inner Join دو تا جدول رو به هم ربط ميده


select count(dbo.barge.code_n)as tedad,dbo.barge.code_n
from dbo.barge inner join dbo.barge1 on
dbo.barge.a1_1 = dbo.barge1.a1_1 and dbo.barge.a1_2 = dbo.barge1.a1_2
و...

تا اينجاي كار من مشكلي ندارم و لي ميخوام قبل از كدهاي زير

dbo.barge.a1_1 = dbo.barge1.a1_1
يه شرط چك بشه كه اگه مقدار a1_1 مثلا 1 بود اين شرط انجام بشه هر كاري كردم نتونستم.
لطفا راهنمايي كنيد.

رضا عربلو
جمعه 22 شهریور 1387, 15:04 عصر
می توانی از کونری های تو در تو و یا از ساختار with استفاده کنی :


with CTE_Inner AS
(
select count(dbo.barge.code_n)as tedad,dbo.barge.code_n
from dbo.barge where .....
)
SELECT tedad, code_n FROM CTE_Inner
INNER JOIN dbo.barge1
on CTE_Inner.a1_1 = dbo.barge1.a1_1 and CTE_Inner.a1_2 = dbo.barge1.a1_2

ahmad1358
جمعه 22 شهریور 1387, 16:40 عصر
با سلام ممنون از راهنمايي شما

وي من كه نميدونم كي مقدار فيلد هاي dbo.barge.a1_1 يا dbo.barge.a1_2 برابر 1 ميشه شايد من منظورمو بد رسونده باشم

من يك تصوير از دو تا جدول بانكم ايجاد كردم با توجه به تصوير

http://i38.tinypic.com/35j9cuw.jpg

حالا من ميخوام يه كوئري بسازم كه جواب اون اين باشه رديف 1 از جدول barge ، سه بار در جدول barge1 تكرار شده و رديف 2 از جدول barge، دو بار در جدول barge1 تكرار شده و بالاخره رديف 3 از جدول barge، دو بار در جدول barge1 تكرار شده است.
چون رديف 3 از جدول barge1 حالت A4_2,A4_3 رو نداره.

يعني نميخوام بگم رديف 1 از جدول برگه سه تا ركورد مساوي مثل خودش تو جدول barge1 داره بلكه ميخوام بگم سه تا ركورد تو جدول barge1 وجود داره كه ركورد 1 از جدول barge زيرمجموعه اونهاست.

يا اينكه اگه يكي از فيلدهاي a1_1,a1_2,a1_3 در جدول barge برابر بود با يكي از فيلدهاي هم نام خودش ( a1_1,a1_2,a1_3) در جدول barge1 بقيه اين 3 تا فيلد هم اگر مساوي نبودند مهم نيست.

رضا عربلو
جمعه 22 شهریور 1387, 17:19 عصر
من که سر گيجه گرفتم. ولی فکر می کنم با یک join و GROUP BY کارت حل می شه!


SELECT dbo.barge.code_n, COUNT(*) AS tedad
FROM dbo.barge
inner join dbo.barge1
on
dbo.barge.a1_1 = dbo.barge1.a1_1 and dbo.barge.a1_2 = dbo.barge1.a1_2
GROUP BY dbo.barge.code_n

ahmad1358
جمعه 22 شهریور 1387, 17:55 عصر
آقا من كه همين كدو اون اول نوشتم و سه نقطه اي هم كه گذاشته بودم واسه Group by بود.
من ميخوام در صورتي dbo.barge.a1_1 = dbo.barge1.a1_1 يا dbo.barge.a1_2 = dbo.barge1.a1_2 اعمال بشه كه dbo.barge.a1_1 يا dbo.barge.a1_2 مقدارشون 1 باشه در غير اين صورت اگه صفر بود اون شرط اعمال نشه

ahmad1358
شنبه 23 شهریور 1387, 02:44 صبح
حالا اگه بشه یه جوری نحوه استفاده از if رو تو کوئری بالا بدونم هم کارم راه می افته من میخوام یه همچین کوئری ایجاد کنم ولی خطا میده که if قرار بگیره


SELECT dbo.barge.code_n, COUNT(*) AS tedad
FROM dbo.barge
inner join dbo.barge1
on
if (dbo.barge.a1_1=1) dbo.barge.a1_1 = dbo.barge1.a1_1 and
if (dbo.barge.a1_2=1) dbo.barge.a1_2 = dbo.barge1.a1_2
GROUP BY dbo.barge.code_n

NewFoxStudent
شنبه 23 شهریور 1387, 11:25 صبح
if exists(Select Code_n From dbo.barge where dbo.barge.a1_1 = dbo.barge1.a1_1)
SELECT dbo.barge.code_n, COUNT(*) AS tedad
FROM dbo.barge
inner join dbo.barge1
on
if (dbo.barge.a1_1=1) dbo.barge.a1_1 = dbo.barge1.a1_1 and
if (dbo.barge.a1_2=1) dbo.barge.a1_2 = dbo.barge1.a1_2
GROUP BY dbo.barge.code_n