PDA

View Full Version : حرفه ای: query برای برنامه ی رستوران



s_mokhtari
سه شنبه 18 خرداد 1389, 21:01 عصر
با سلام:افسرده:
دوستان من ميخوام طوري شماره سالن رستوران را تعيين كنم كه اگه ساعت 11 تا 5 بعدازظهر بود اگه شماره سالني توي اين تاريخ و اين ساعت نداشته باشيم از 1 شروع كنه در غير اين صورت از آخرين عدد و اگه ساعت 6 تا 11 شب بود دوباره اگه شماره سالني تو اين تاريخ و اين ساعت نبود از يك در غير اين صورت از بزرگترين عدد قبلي كه داريم ادامه بده
حالا اين كد را نوشتم ولي ميخوام فقط يه ركورد اونم كه بزرگتر از همه است و توي اين تاريخ را نشون بده براي همين ركوردم را مرتب كردم طبق نزولي تا بزرگ اول باشه
ALTER PROCEDURE [dbo].[STR_SALONSHAB]
(@DATETODAY nvarchar(10))
AS SELECT SaleDate, MAX(DisplayId) AS M2, SaleTime
FROM dbo.Tbl_Sale
GROUP BY SaleDate, SaleTime
HAVING (SaleDate = @DATETODAY) AND (SaleTime LIKE N'16%' OR
SaleTime LIKE N'17%' OR
SaleTime LIKE N'18%' OR
SaleTime LIKE N'19%' OR
SaleTime LIKE N'20%' OR
SaleTime LIKE N'21%' OR
SaleTime LIKE N'22%' OR
SaleTime LIKE N'23%' )
ORDER BY m2 DESC
اگه راه بهتري است بهم بگيد
با تشكر:گریه:
خيلي عجله دارم

محمد سلیم آبادی
سه شنبه 18 خرداد 1389, 21:49 عصر
data type ستون SaleTime چی هست؟ مثل DETETODAY رشته ای با طول 10 کاراکتر است.
امکان داره یک نمونه از داده های جدول را ارسال کنید؟
این ساعتی که در موردش صحبت کردین و گفتین مثلا اگر از 11 تا 5 بعد از ظهر بود، مقدارش با پارامتر DATETODAY مشخص میشه؟ امکان داره چند نمونه از این داده ارسال کنید.

کوئری که نوشتین ظاهرا فقط مخصوص ساعت 4 تا 11 بعد از ظهر هست، مگه نمی خواهین کوئری برای هر دو زمان نتیجه ی مورد نظر را تولید کند؟

s_mokhtari
چهارشنبه 19 خرداد 1389, 08:08 صبح
data type ستون SaleTime چی هست؟ مثل DETETODAY رشته ای با طول 10 کاراکتر است.
امکان داره یک نمونه از داده های جدول را ارسال کنید؟
این ساعتی که در موردش صحبت کردین و گفتین مثلا اگر از 11 تا 5 بعد از ظهر بود، مقدارش با پارامتر DATETODAY مشخص میشه؟ امکان داره چند نمونه از این داده ارسال کنید.

کوئری که نوشتین ظاهرا فقط مخصوص ساعت 4 تا 11 بعد از ظهر هست، مگه نمی خواهین کوئری برای هر دو زمان نتیجه ی مورد نظر را تولید کند؟

با سلام
ديتاتايپش هم مثل ديتتودي رشته‌اي كه داخلش ساعت مثل 11:20 ذخيره ميشود تو برنامه هم اين ديتتودي تاريخ روز كه به كواري ارسال ميشه
دو تا كواري نوشتم
يكيش رو كه ديديد اينم كواري دومي
ALTER PROCEDURE dbo.STR_SALON
(@DATETODAY nvarchar(10))
AS SELECT SaleDate, MAX(DisplayId) AS M2, SaleTime
FROM dbo.Tbl_Sale
GROUP BY SaleDate, SaleTime
HAVING (SaleDate = @DATETODAY) AND (SaleTime LIKE N'11%' OR
SaleTime LIKE N'00%' OR
SaleTime LIKE N'13%' OR
SaleTime LIKE N'14%' OR
SaleTime LIKE N'15%')
ORDER BY m2 DESC
با تشكر:خجالت:

محمد سلیم آبادی
چهارشنبه 19 خرداد 1389, 10:10 صبح
اینها را امتحان کنید، شما TOP 1 را جلوی SELECT جا انداختین:

ALTER PROCEDURE [dbo].[STR_SALONSHAB] (@DATETODAY nvarchar(10))
AS SELECT TOP 1 SaleDate, MAX(DisplayId) AS M2, SaleTime
FROM dbo.Tbl_Sale
GROUP BY SaleDate, SaleTime
HAVING (SaleDate = @DATETODAY)
AND (SUBSTRING(SaleTime,1,2) BETWEEN '16' AND '23')
ORDER BY M2 DESC;


ALTER PROCEDURE dbo.STR_SALON
(@DATETODAY nvarchar(10))
AS SELECT TOP 1 SaleDate, MAX(DisplayId) AS M2, SaleTime
FROM dbo.Tbl_Sale
GROUP BY SaleDate, SaleTime
HAVING (SaleDate = @DATETODAY) AND (SaleTime LIKE N'11%' OR
SaleTime LIKE N'00%' OR
SaleTime LIKE N'13%' OR
SaleTime LIKE N'14%' OR
SaleTime LIKE N'15%')
ORDER BY m2 DESC