PDA

View Full Version : select



*unos*
پنج شنبه 04 مهر 1387, 11:18 صبح
با سلام
من مي خوام يه select بنويسم كه sum يه فيلدرو در دو بازه مختلف در ستونهاي مجزا بهم برگردونه
ممنون ميشم راهنمايي كنيد

کم حوصله
پنج شنبه 04 مهر 1387, 12:03 عصر
سلام
یکم بیشتر توضیح بده یا حداقل یک مثال بزن که چی می خواهید

mannai29
پنج شنبه 04 مهر 1387, 12:05 عصر
select sum(case when FLD<x1 and FLD>x2 then FLD else 0 end)as FLD1,
sum(case when FLD<x3 and FLD>x4 then FLD else 0 end)as FLD2
From TBL

در دستورات case بیشتر مطالعه کنید . موفق باشید.

*unos*
دوشنبه 08 مهر 1387, 10:03 صبح
من مشكلم با اين
http://barnamenevis.org/forum/showthread.php?t=121960&highlight=sum&page=2
حل ميشه اما syntax error داره !
چه شكلي مي تونم حلش كنم؟

mannai29
دوشنبه 08 مهر 1387, 18:32 عصر
من مشكلم با اين
http://barnamenevis.org/forum/showth...ght=sum&page=2 (http://barnamenevis.org/forum/showthread.php?t=121960&highlight=sum&page=2)
حل ميشه اما syntax error داره !
چه شكلي مي تونم حلش كنم؟

شرطهای where را در داخل متن به بعد از From منتقل کنید و پرانتز آخر باید بسته باشد و بعد از آن پرانتز آخر مثلا بنویسید TBL1 دیگر می توانید از آن استفاده کنید.
اما فکر می کنم شما سووال خود را خیلی کلی طرح کرده اید چون اگر آنطور باشد که من فهمیده ام باید جواب قبلی مشکل شما را حل کرده باشد.
به هر حال پیروز باشید.

*unos*
سه شنبه 09 مهر 1387, 11:22 صبح
شرطهای where را در داخل متن به بعد از From منتقل کنید و پرانتز آخر باید بسته باشد و بعد از آن پرانتز آخر مثلا بنویسید TBL1 دیگر می توانید از آن استفاده کنید.
سلام
من با گفته هاي شما اين كدرو نوشتم اما پيغام هاي زيرو ميده
Invalid column name 'dar_id'. و Invalid column name 'dar_price'.



use db
select sum(dar_id) as s1,sum(dar_price) as s2 from
(
select sum(dar_id) as s1,0 as s2 from orderr where (dar_date>='13870701' and dar_date<='13870731')
union
select 0 as s1,sum(dar_price) as s2 from orderr where (dar_date<'13870701')
)
orderr

کم حوصله
سه شنبه 09 مهر 1387, 12:23 عصر
سلام
دوست عزیز وقتی به فیلدی نام جدید می دهید منبعد باید با نام جدید آن را فراخوانی کنی
اینم کد اصلاح شده


use db
select sum(s1) as s1,sum(s2) as s2 from
(
select sum(dar_id) as s1,0 as s2 from orderr where (dar_date>='13870701' and dar_date<='13870731')
union
select 0 as s1,sum(dar_price) as s2 from orderr where (dar_date<'13870701')
)
orderr

*unos*
سه شنبه 09 مهر 1387, 12:31 عصر
دست همه ي دوستان درد نكنه
مشكلم حل شد

*unos*
پنج شنبه 11 مهر 1387, 09:45 صبح
با سلام
من هدفم از به دست آوردن مجموع یک فیلد در دو بازه مختلف این بود که بتونم یک همچین گزارشی بگیرم
http://barnamenevis.org/forum/attachment.php?attachmentid=24004&stc=1&d=1222929741 با استفاده از این این جدول ها

http://barnamenevis.org/forum/attachment.php?attachmentid=24005&stc=1&d=1222929741

اما با کمک دوستان و تلاش خودم نتونستم این گزارش رو درست کنم
اگر دوستان کمک کنند ممنون میشم

کم حوصله
پنج شنبه 11 مهر 1387, 11:56 صبح
سلام
دوست عزیز جداول و فیلد ها را معرفی کردی ولی فیلدهای کلید و نحوه ارتباط جداول را مشخص نکردی !!

*unos*
پنج شنبه 11 مهر 1387, 12:08 عصر
سلام
http://barnamenevis.org/forum/attachment.php?attachmentid=24009&stc=1&d=1222938394

کم حوصله
پنج شنبه 11 مهر 1387, 12:50 عصر
سلام
اولا یک خرده گیری چرا نام فیلد کلیدت با نام کلید خارجی در جدول دیگر فرق داره؟؟

دوما ببین اصلا من درست گرفتم


Select O.Dar_Date, OD.Od_P_C, OD.Od_Name, Sum(Od_P_F) AS Od_P_F, E.Et_Price
From Order_Details OD Inner Join Etebarat E ON OD.Od_P_C = E.Et_Id Inner Join Orderr O ON OD.Od_Id = O.Dar_Id
Group By O.Dar_Date, OD.Od_P_C, OD.Od_Name, E.Et_Price
Where O.Dar_Date = 'تاریخ درخواستی'

*unos*
پنج شنبه 11 مهر 1387, 13:02 عصر
سلام


اولا یک خرده گیری چرا نام فیلد کلیدت با نام کلید خارجی در جدول دیگر فرق داره؟؟
دقت بيشتري مي كنم در نام گذاري


دوما ببین اصلا من درست گرفتم
Select O.Dar_Date, OD.Od_P_C, OD.Od_Name, Sum(Od_P_F) AS Od_P_F, E.Et_Price
From Order_Details OD Inner Join Etebarat E ON OD.Od_P_C = E.Et_Id Inner Join Orderr O ON OD.Od_Id = O.Dar_Id
Group By O.Dar_Date, OD.Od_P_C, OD.Od_Name, E.Et_Price
Where O.Dar_Date = 'تاریخ درخواستی'
تقريبا همينو مي خوام البته...


SELECT Order_Detial.Od_P_C, Order_Detial.Od_Name, Etebarat.Et_Price, SUM(Order_Detial.Cd_P_F) AS curr_month
FROM Order_Detial INNER JOIN
Orderr ON Order_Detial.Od_P_C = Orderr.Dar_Id INNER JOIN
Etebarat ON Order_Detial.Od_Id = Etebarat.Et_Id
WHERE (Orderr.Dar_Date >= '13870701' AND Orderr.Dar_Date <= '13870730')
GROUP BY Order_Detial.Od_P_C, Order_Detial.Od_Name, Etebarat.Et_Price, Orderr.Dar_Date
تا اين قسمت رو خودم تونستم انجام بدم اما مشكل من اينه كه SUM(Order_Detial.Cd_P_F) رو در دو بازه مي خوام


SUM(Order_Detial.Cd_P_F) AS last_months WHERE (Orderr.Dar_Date < '13870701'

ممنون از اين كه براي رفع مشكلم وقت مي زاريد

کم حوصله
پنج شنبه 11 مهر 1387, 14:57 عصر
سلام
تست کن ببین کدوم راضیت میکنه


SELECT Order_Detial.Od_P_C, Order_Detial.Od_Name, Etebarat.Et_Price, Sum(curr_month) AS curr_month, Sum(Last_Month) As Last_Month
From (
SELECT Order_Detial.Od_P_C, Order_Detial.Od_Name, Etebarat.Et_Price, Order_Detial.Cd_P_F AS curr_month, 0 As Last_Month
FROM Order_Detial INNER JOIN
Orderr ON Order_Detial.Od_P_C = Orderr.Dar_Id INNER JOIN
Etebarat ON Order_Detial.Od_Id = Etebarat.Et_Id
WHERE (Orderr.Dar_Date >= '13870701' AND Orderr.Dar_Date <= '13870730')
Union All
SELECT Order_Detial.Od_P_C, Order_Detial.Od_Name, Etebarat.Et_Price, 0 As curr_month, Order_Detial.Cd_P_F AS Last_Month
FROM Order_Detial INNER JOIN
Orderr ON Order_Detial.Od_P_C = Orderr.Dar_Id INNER JOIN
Etebarat ON Order_Detial.Od_Id = Etebarat.Et_Id
WHERE (Orderr.Dar_Date < '13870701')) T
GROUP BY Order_Detial.Od_P_C, Order_Detial.Od_Name, Etebarat.Et_Price, Orderr.Dar_Date




SELECT Order_Detial.Od_P_C, Order_Detial.Od_Name, Etebarat.Et_Price,
Sum(Case When (Orderr.Dar_Date >= '13870701' AND Orderr.Dar_Date <= '13870730') Then Order_Detial.Cd_P_F Else 0 End ) AS curr_month,
Sum(Case When (Orderr.Dar_Date < '13870701') Then Order_Detial.Cd_P_F Else 0 End ) As Last_Month
FROM Order_Detial INNER JOIN
Orderr ON Order_Detial.Od_P_C = Orderr.Dar_Id INNER JOIN
Etebarat ON Order_Detial.Od_Id = Etebarat.Et_Id
GROUP BY Order_Detial.Od_P_C, Order_Detial.Od_Name, Etebarat.Et_Price, Orderr.Dar_Date

*unos*
چهارشنبه 17 مهر 1387, 09:20 صبح
ممنون از كدتون
دومي كارمو را انداخت اما اولي error nhaj داشت
متن error رو بعدا مي زارم
بازم ممنون.