PDA

View Full Version : تقسیم چند فیلد از دو جدول و ریختن جواب در جدول جدید



bahar2008
چهارشنبه 15 خرداد 1387, 12:20 عصر
سلام دوستان خوبم

من در کد نویسی در تقسیم اعشاری table هام مشکل دارم که امیدوارم با کمک شما دوستان حلش کنم :قلب::قلب::قلب::قلب:

این table اول هست با فیلدهایش>>>>>>>>>>>>



CREATE TABLE [setande2] (
[idsetande] [int] NOT NULL ,
[namesetande] [char] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[vahedeandazegiri] [char] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[sal81] [int] NULL ,
[sal82] [int] NULL ,
[sal83] [int] NULL ,
[sal84] [int] NULL ,
[sal85] [int] NULL ,
[sal86] [int] NULL ,
[sal87] [int] NULL ,
[sal88] [int] NULL ,
[sal89] [int] NULL ,
[sal90] [int] NULL ,
CONSTRAINT [PK_setande2] PRIMARY KEY CLUSTERED
(
[idsetande]
) ON [PRIMARY]
) ON [PRIMARY]
GO




این هم table دوم هست با فیلدهایش>>>>>>>>>>>>>


CREATE TABLE [dade2] (
[iddade] [int] NOT NULL ,
[namedade] [char] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[vahedeandazegiri] [char] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[sal81] [int] NULL ,
[sal82] [int] NULL ,
[sal83] [int] NULL ,
[sal84] [int] NULL ,
[sal85] [int] NULL ,
[sal86] [int] NULL ,
[sal87] [int] NULL ,
[sal88] [int] NULL ,
[sal89] [int] NULL ,
[sal90] [int] NULL ,
CONSTRAINT [PK_dade2] PRIMARY KEY CLUSTERED
(
[iddade]
) ON [PRIMARY]
) ON [PRIMARY]
GO



حالا می خوام کدی بنویسم که بتونه اول از همه یک table جدید ایجاد کنه (با فیلدهای سال 81 تا 90 ) و بعد تک تک فیلدهای سال 81 تا سال 90 از table اول رو تقسیم (اعشاری) کنه بر فیلدهای سال 81 تا 90 table دوم و جواب رو در table جدید قرار بده البته جوری که بفهمه جوابی که در table جدید هست مربوط به کدوم id هست

SYNDROME
چهارشنبه 15 خرداد 1387, 20:01 عصر
خوب دوست عزیز اگر قرار است فیلد sal81 از جدول 1 با فیلد sal81 از جدول دوم با هم تقسیم شوند پس نتیجه را می توانید در فیلد مثلاsal81 در جدول سوم بریزید.
پس نکته نامعلوم کجاست؟
موفق باشید

bahar2008
پنج شنبه 16 خرداد 1387, 11:07 صبح
مشکل اینجاست که راه حلش رو می دونم ولی کد نویسی اش رو بلد نیستم مخصوصا اینکه می خوام تقسیم اعشاری انجام بده :گریه::گریه::گریه:

AminSobati
پنج شنبه 16 خرداد 1387, 13:13 عصر
شما فیلدهاتون int هستند و اعشار از حاصل تقسیم حذف میشه. یا جنس فیلدتون رو عوض کنین یا موقع انجام تقسیم، فیلد رو Cast کنین به جنسی مثل Money یا غیره...

bahar2008
پنج شنبه 16 خرداد 1387, 16:26 عصر
ممنونم از راهنماییتون دوست عزیز
درباره کدنویسی تقسیم فیلد به فیلد هم می شه کمکم کنید؟ آخه من که در viwe نوشتم تقسیم رو شرط این رو گذاشتم که مقسوم علیه 0 نباشه چون اگر 0 می بود خطا می گرفت ولی فقط برای فیلد اول درست انجام می داد و برای بقیه فیلدها خطا می گرفت ..... شما می دونید علت اینکه خطا می گیره چی هست؟

AminSobati
جمعه 17 خرداد 1387, 15:59 عصر
قسمت دیگه ی صورت مسئله رو من خوب درک نکردم، لطفا با مثال توضیح بدین

bahar2008
شنبه 18 خرداد 1387, 11:52 صبح
من برای عمل تقسیم این کد رو نوشتم



SELECT dbo.setande2.sal81, dbo.dade2.sal81 AS Expr1,
CASE WHEN dbo.dade2.sal81 = 0 THEN dbo.setande2.sal81 ELSE dbo.setande2.sal81 / dbo.dade2.sal81 END AS shakhes
FROM dbo.setande2 CROSS JOIN
dbo.dade2



ولی این کد فقط برای سال 81 درست کار می کنه و همینکه می خوام برای سالهای بعدی
این تغییر رو بدم


SELECT dbo.setande2.sal81, dbo.dade2.sal81 AS Expr1, dbo.setande2.sal82, dbo.dade2.sal82 AS Expr2,
CASE WHEN dbo.dade2.sal81,dbo.dade2.sal82 = 0 THEN dbo.setande2.sal81,dbo.setande.sal82 ELSE dbo.setande2.sal81 / dbo.dade2.sal81,dbo.setande2.sal82 / dbo.dade2.sal82 END AS shakhes
FROM dbo.setande2 CROSS JOIN
dbo.dade2




خطا می گیره که علامت ( و ) رو نمی شناسه ......باید چه جوری کد اول رو تغییر بدم که بدون خطا برای سالهای بعدی هم تقسیم رو درست انجام بده دوست عزیز؟

AminSobati
شنبه 18 خرداد 1387, 16:47 عصر
case رو که اشتباه بکار بردین. ضمنا چرا cross join؟ مگه ارتباط خاصی بین این دو جدول برقرار نیست؟

bahar2008
یک شنبه 19 خرداد 1387, 10:52 صبح
ممنونم دوست عزيز
مي شه لطفا بگيد كجاي دستور case اشتباه هست و چه جوري بايد بنويسم تا درست كار كنه؟
بين اين دو جدول هم ارتباط خاصي نزاشتم ........ ارتباط داشتن و نداشتن چه قدر مفيده در اين تيكه برنامه؟

AminSobati
دوشنبه 20 خرداد 1387, 22:14 عصر
به ساختار و مثالهای Case در Books Online نگاهی داشته باشید.
ساخت ارتباط به صورت فیزیکی مد نظر من نیست، بلکه از نظر منطقی آیا هیچ ارتباطی بین این جداول وجود نداره؟ چرا inner join استفاده نکردین؟