سلام من
یک جدول دارم با این ستون ها
pipId_fk
Timestamp
online
total
rate
watter15_min
حالا من دنبال یک کوییری هستم که
برای هر pipID_fk تولید رو به صوزت آنلاین و آفلاین حساب کنم وروند کارم هم ایمطوریه که برای آفلاین میام ستون watter15_minرو باهم جکع میکنم تو بازه ی دلخواه و محاسبه آنلاین هم به این صورت هستش که میام آخرین مقدار رو منهای اولین مقدار میکنم از ستون total. بعد میخام اینا تو دوتا ستون جدا نوشته شوند.م
با سلام
اول شما یک توضیح بدین این پروژه چی هست ؟
ورودی ؟ خروجی ؟ هدف ؟ یک سناریو در موردش بگین تا بشه درکش کرد .
(۰۲-خرداد-۱۳۹۲, ۱۳:۱۳:۱۸)hamed_Arfaee نوشته است: [ -> ]با سلام
اول شما یک توضیح بدین این پروژه چی هست ؟
ورودی ؟ خروجی ؟ هدف ؟ یک سناریو در موردش بگین تا بشه درکش کرد .
خب فکر کنم واضح گفتم ،اصل پروژه این هستش که ما یک تایمر داریم هر یک یک ربع یکبار میاد اطلاعات رو در جدول Timestamp ذخیره میکنه.حالا ما توی گزارشاتمون برای محاسبه تولید میاییم تولید رو در حالت برای هر چاه حساب میکنیم هم جاهایی که چاه آنلاین بوده و هم جاهایی که چاه آفلاین بوده.که متد محاسبه تولید آنلاین و آفلاین متفاوته.و ما هر دوتا تولید رو لازم دریم.
لطفا اگه کسی از دستر Case استفاده کرده به طور حرفه ای مثال داره لطفا راهنمایی کنه.یا از اشرهدل
با سلام و عرض صمیمانه ترین احترامات :
میشه در مورد
نقل قول: بعد میخام اینا تو دوتا ستون جدا نوشته
یه کم بیش تر توضیح بدید .
[
attachment=9431][
attachment=9431][
attachment=9431]
(۰۳-خرداد-۱۳۹۲, ۰۱:۴۵:۱۶)Agary نوشته است: [ -> ]با سلام و عرض صمیمانه ترین احترامات :
میشه در مورد نقل قول: بعد میخام اینا تو دوتا ستون جدا نوشته
یه کم بیش تر توضیح بدید .
سلام
می خام خروجی این شکلی باشه.شکل رو ببینید لطفا
یه هم چین دستوری میخام با سینتکس درستش
select pipId_fk ,online_tolid ,offline_Tolid
case online=1
select max(total)-min(tota)
case 0 select sum (watter_15min)
خب شما میخواهی تو 2 تا ستون مجزی باشه با case یه کم دردسرش زیاده
تقریبا به این شکل در میاد
کد:
select pipId_fk,
(case pipId_fk when 'offline'then select sum(watter15_min)from table else null end)online_tolid
,
(case pipId_fk when 'online'then select (max(total)-min(total))from table else null end)offline_Tolid from table
(۰۴-خرداد-۱۳۹۲, ۰۹:۵۴:۵۶)lord_viper نوشته است: [ -> ]خب شما میخواهی تو 2 تا ستون مجزی باشه با case یه کم دردسرش زیاده
تقریبا به این شکل در میاد
کد:
select pipId_fk,
(case pipId_fk when 'offline'then select sum(watter15_min)from table else null end)online_tolid
,
(case pipId_fk when 'online'then select (max(total)-min(total))from table else null end)offline_Tolid from table
متشکرم از راهنمایی تون ولی اینجا 2 مسیله وجود دره
1-همه ی _pipId ها رو میخواهیم
2-online یک ستون هستش که یا یک یا صفر
case روی pipId_fk به دردم نمی خوره.
به فایل ضمیمه نگاهی بندازین.در پست قبل تا دقیق متوجه منظورم بشین
[
attachment=9432]
ساختار جدول من این شکلی ومن می خواهم خروجی کوییری ام گروپ شده باشه بر اساس کد چاه(pipId_fk) , وبرای هر چاه یک تولید آنلاین محاسبه کنم و هم آفلاین
دوست عزیز و بزرگ وارم سلام
این دستور را یک بررسی بفرمایید ، شاید به کارتان آمد :
کد:
DECLARE @MAX INT
SELECT TOP (1) @MAX = Total
FROM YOUR_DB_NAME ORDER BY Total DESC
DECLARE @MIN INT
SELECT TOP (1) @MIN = Total
FROM YOUR_DB_NAME ORDER BY Total ASC
DECLARE @Watter15_Min FLOAT
SELECT @Watter15_Min = SUM(Watter15_Min)
FROM YOUR_DB_NAME
SELECT Pipeid_FK, Online_Tolid ,Offline_Tolid ,Total =
CASE Online
WHEN 'True' THEN @MAX-@MIN
WHEN 'False' THEN @Watter15_Min
END
FROM YOUR_DB_NAME
GO
بازم ببخشید اگر بی ربط جواب دادم . به هر شکل تلاش کردم چیزی که شما خواستید رو پیاده کنم .
اگر موفقیت آمیز بود ما رو بی خبر نذارید :)) !
موفق باشید .
(۰۶-خرداد-۱۳۹۲, ۰۹:۴۵:۰۹)Agary نوشته است: [ -> ]دوست عزیز و بزرگ وارم سلام
این دستور را یک بررسی بفرمایید ، شاید به کارتان آمد :
کد:
DECLARE @MAX INT
SELECT TOP (1) @MAX = Total
FROM YOUR_DB_NAME ORDER BY Total DESC
DECLARE @MIN INT
SELECT TOP (1) @MIN = Total
FROM YOUR_DB_NAME ORDER BY Total ASC
DECLARE @Watter15_Min FLOAT
SELECT @Watter15_Min = SUM(Watter15_Min)
FROM YOUR_DB_NAME
SELECT Pipeid_FK, Online_Tolid ,Offline_Tolid ,Total =
CASE Online
WHEN 'True' THEN @MAX-@MIN
WHEN 'False' THEN @Watter15_Min
END
FROM YOUR_DB_NAME
GO
بازم ببخشید اگر بی ربط جواب دادم . به هر شکل تلاش کردم چیزی که شما خواستید رو پیاده کنم .
اگر موفقیت آمیز بود ما رو بی خبر نذارید :)) !
موفق باشید .
سلام از ماست،آره اسخ شما دقیقا همون چیزیه که من دنبالشم .اما این روش حاصل رو برای یک pip به من میده،اگه بخوام همین روش رو برای چند چاه پیاده کنم غیر از دستور Cursor راه دیگه ای ندارم؟
سلام بزرگوار از ته دل خوشحالم که به دردتون خورد .
امیدوارم این یکی کمک بیشتری به شما بکنه :
کد:
SELECT PipeId_FK, Online AS Online, SUM(Watter15_Min) AS Watter15_Min
, MAX(Total) Total_MAX, MIN(Total) AS Total_MIN
, ONLINE_Tolid =
CASE Online
WHEN 'True' THEN
MAX(Total) - MIN(Total)
ELSE
Null
END
, OFFLINE_Tolid =
CASE Online
WHEN 'False' THEN
SUM(Watter15_Min)
ELSE
Null
END
FROM YUOR_TABLE_NAME GROUP BY PipeId_FK, Online
GO
بازم شرمنده اگر مشکل حل نشد .
ما رو بی خبر نذارید . :)
(۰۷-خرداد-۱۳۹۲, ۱۲:۲۶:۳۲)Agary نوشته است: [ -> ]سلام بزرگوار از ته دل خوشحالم که به دردتون خورد .
امیدوارم این یکی کمک بیشتری به شما بکنه :
کد:
SELECT PipeId_FK, Online AS Online, SUM(Watter15_Min) AS Watter15_Min
, MAX(Total) Total_MAX, MIN(Total) AS Total_MIN
, ONLINE_Tolid =
CASE Online
WHEN 'True' THEN
MAX(Total) - MIN(Total)
ELSE
Null
END
, OFFLINE_Tolid =
CASE Online
WHEN 'False' THEN
SUM(Watter15_Min)
ELSE
Null
END
FROM YUOR_TABLE_NAME GROUP BY PipeId_FK, Online
GO
بازم شرمنده اگر مشکل حل نشد .
ما رو بی خبر نذارید . :)
واقعا ممنون از راهنماییتون حتما در فرصت کافی تستش می کنم و بهتون میگم.منم واقعا ممنونم که وقت میذارین وبه سوالات من پاسخ میدید.