PDA

View Full Version : کمک در نوشتن تیکه کد حلقه



sempaisaleh
شنبه 17 فروردین 1392, 14:22 عصر
(دوست عزیز اگر عنوان تاپیک مشکل داره لطفا حذف نکنید تاپیک رو، عنوان رو ویرایش کنید)
دوستان من یک کد می خوام بنویسم که کارای زیر و انجام بده
یک جدول به نام A دارم با فیلدهای a1,a2,a3,a4 (فیلد A1 فیلد کلید می باشد)
یک جدول دارم به نام b با فیلدهای b1,b2,b3,b4
ارتباط از طریق فیلد a1 به b1 است
درخواست: حالا می خوام یه تیکه کد بنویسم که بیاد از جدول a یک جستجو انجام بده با بازه (مثلا 1 تا 20) بعد بیاد به اضای هر رکوردی که پیدا کرده تو جدول b دو تا رکورد اضافه کنه با همون اطلاعات (یعنی 20 تا نتیجه جستجو باشه میشه 40 رکورد) اطلاعات اضافه شده هم به این صورت باشه که b1=a1 و b2=a2 و b3 تو رکورد اول مساوی 1 و در رکورد دوم مساوی 2 باشه. حالا این به اضای هر رکورد جستجو شده ادامه داشته باشه. به شکل ذیل

102390
http://barnamenevis.org/images/misc/pencil.png

Reza_Yarahmadi
شنبه 17 فروردین 1392, 16:06 عصر
باز هم عنوان تاپیک ایراد داره!!
کد زیر رو امتحان کنید
;With AA as(
Select * From A
Union All
Select * From A)

Insert Into B (b1, b2, b3)
Select a1, a2, Row_Number() Over(Partition By a1 Order by a1)
From AA
و یا
Insert Into B (b1, b2, b3)
Select a1, a2, 1
From A
Insert Into B (b1, b2, b3)
Select a1, a2, 2
From A

sempaisaleh
شنبه 17 فروردین 1392, 17:19 عصر
اقا دستت درد نکنه حل شد فقط یه مشکل دیگه دارم اونم اینه که می خوام این اضافه کردن در صورتی باشه که مثلا از این جستجویی که انجام شده و از A1 مقدار های (1و2و3و4و5و6) بدست اومده اونهایی اضافه کنه که تو جدول b نیست.
مثلا جدول b مقدارهای (1و2و5) رو داره. با این کد بالا ارور میده چون b3 فیلد کلید هست و تکراری میشه حال باید کدی بنویسیم که بیاد فقط (3و4و6) رو اضافه کنه و اونایی که قبلا تو b هست رو دوباره نیاد insert کنه که ارور بده.
بازم با تشکر

Reza_Yarahmadi
شنبه 17 فروردین 1392, 17:47 عصر
توی دستور اول شرطش رو به جستجو بر روی AA اضافه کنید
...
From AA
Where
a1 NOT IN (Select b1 From B)

sempaisaleh
یک شنبه 18 فروردین 1392, 07:53 صبح
آقا رضا با تشکر از جوابتون من از دستور دومی استفاده کردم چه شرطی برای اون بذارم؟ من با استفاده از if not exists هم نتونستم البته شاید کد من اشکال داره. میشه دوستان یه نگاهی بندازن.


if not exists (select b1 from b inner join a on b.b1 =a.a1 where b.b1 =a.a1)
Insert Into b (b1, b2, b3,b4,b5,b6)
Select b.b1, b.b2, 1,916,916002,1
From a where a.a1>0 and a.a1<8322 and a.a2=1391 and a.comment= 'کنترلي'
Insert Into b (b1, b2, b3,b4,b5,b6)
Select b.b1, b.b2, 2,916,916002,1
From a where a.a1>0 and a.a1<8322 and a.a2=1391 and a.comment= 'کنترلي'

این ارور رو میده


Ambiguous column name 'a1'.

شاید سوتی داده باشم (ضایع نکنین):لبخندساده:

sempaisaleh
دوشنبه 19 فروردین 1392, 08:06 صبح
با سلام خدمت دوستان و مدیران. ارور رو تونستم بر طرف کنم ولی جواب نگرفتم.


if not exists (select a.a1 from a inner join b on b.b1 =a.a1)
Insert Into b (b1, b2, b3,b4,b5,b6)
Select b.b1, b.b2, 1,916,916002,1
From a where a.a1>0 and a.a1<8322 and a.a2=1391 and a.comment= 'کنترلي'
Insert Into b (b1, b2, b3,b4,b5,b6)
Select b.b1, b.b2, 2,916,916002,1
From a where a.a1>0 and a.a1<8322 and a.a2=1391 and a.comment= 'کنترلي'

بازم جواب نداد. می خوام بیاد a1 رو تو جدول b با b1 نقایسه کنه اگه از a1 تو b1 نبود بیاد همین insert ها رو انجام بده. لطفا کمک کنید