PDA

View Full Version : ایجاد تابعی بادو ورودی یک ثابت را برگرداند



ashena29
سه شنبه 30 مرداد 1386, 08:35 صبح
با تشکر از بینندگان این بحث:
بدنبال تابعی هستم که با گرفتن دو پارامتر ورودی از جنس کرکتر (پروژه و زیر پروژه) به ازاء پروژه هایی که دارای زیر پروژه همانند هستند یک عدد ثابت برگرداند.
جهت روشن شدن موضوع مثالی می زنم:

به ازاء ورودی 1000 MC خروجی 1

به ازاء ورودی 1000 BM خروجی 2

به ازاء ورودی 2000 MC خروجی 3

به ازاء ورودی 1000 GM خروجی 4

به ازاء ورودی 3000 MC خروجی 5

به ازاء ورودی 1000 BM خروجی 2

به ازاء ورودی 2000 MC خروجی 3

به ازاء ورودی 1000 VF خروجی 6

Kamyar.Kimiyabeigi
سه شنبه 30 مرداد 1386, 09:29 صبح
create function [dbo].[returnvalue] (@prm1 nvarchar(100), @prm2 nvarchar(100))
RETURNS int
begin
declare @val int
if exists(select * from dbo.Customers
where CustomerID = @prm1 and Country = @prm2)
begin
set @val = 1
end
else
begin
set @val = 2
end
return(@val)
end

select [dbo].[returnvalue] (N'ALFKI', N'Germany')

ashena29
سه شنبه 30 مرداد 1386, 20:05 عصر
با تشکر از کامیار عزیز که پاسخ دادند متاسفانه این تابع پیشنهادی مشکل را رفع نمی نماید!
چون تعداد زیر پروژه ها برای ما نامشخص است. به طور مثال این تابع برای هر زیر پروژه یک پروژه یک عدد ثابت را در نظر بگیرد یعنی هر جا پروژه 1000بود و زیر پروژه MK عدد مثلا 6 را برگرداندو این دائما" تکرار گردد با فرض این که ما نمی دانیم هر پروژه چند زیر پروژه دارد

Kamyar.Kimiyabeigi
چهارشنبه 31 مرداد 1386, 08:39 صبح
دوست عزیز بر اساس درخواست شما و مثال من فرض کنید مشتری همون پروژه هست و سفارشات همون زیر پروژها. کد زیر تمام سفارشاتی که مشتری یکسان دارند رو میاره

select o1.OrderID, o1.CustomerID , c.CompanyName
from dbo.Orders o1
inner join dbo.Orders o2 on o1.CustomerID = o2.CustomerID
inner join dbo.Customers c on o1.CustomerID = c.CustomerID
order by o1.OrderID, o1.CustomerID , c.CompanyName

حالا کد زیر علاوه بر اطلاعات بالا یک recno هم براتون برمیگردونه که در واقع تعداد مشتری و سفارش هست. دقیقا" مثل مثال خودتون در پست شماره یک


select count(*) rno, o1.OrderID, o1.CustomerID , c.CompanyName
from dbo.Orders o1
inner join dbo.Orders o2 on o1.CustomerID = o2.CustomerID
inner join dbo.Customers c on o1.CustomerID = c.CustomerID
group by o1.OrderID, o1.CustomerID , c.CompanyName
order by rno, o1.OrderID, o1.CustomerID , c.CompanyName
حالا select بالا رو هم میتونین مجزا استفاده کنین و هم میتونین function کنید