PDA

View Full Version : جمع کردن مقادیر مختلف یک جدول در یک ردیف جدول دیگر



masoode
دوشنبه 07 خرداد 1397, 10:12 صبح
سلام
من یک جدول دارم به صورت زیر:

Value DateTime ParameterID ID
3 1 2018-05-24 11:51:32.103 34.146
4 2 2018-05-24 11:51:32.103 23.138
5 1 2018-05-24 11:51:38.103 39.16
51 1 2018-05-26 08:20:15.670 54.302
52 2 2018-05-26 08:20:15.687 22.178
53 1 2018-05-26 08:20:20.603 58.594
54 2 2018-05-26 08:20:20.607 26.047
55 1 2018-05-26 08:20:25.617 55.696
56 2 2018-05-26 08:20:25.617 28.925
57 1 2018-05-26 08:20:30.620 47.332
58 2 2018-05-26 08:20:30.633 29.744
59 1 2018-05-26 08:20:35.627 40.589
60 2 2018-05-26 08:20:35.630 34.447
61 1 2018-05-26 08:20:40.637 43.543
62 2 2018-05-26 08:20:40.640 34.805
63 1 2018-05-26 08:20:45.643 42.328

می خواهم یک View یا Stored Procedure بسازم که در هر ردیف مقادیر زیر را برگردونه:
DateTime ValueOfParameter1 ValueOfParameter2

این را هم خودم نوشته ام اما مقادیر دما و رطوبت را توی همه ردیف ها تکراری میزنه!
SELECT DT,
(SELECT TOP (1) Value
FROM dbo.tblDataLog
WHERE (ParameterId = 1)) AS temprature,
(SELECT TOP (1) Value
FROM dbo.tblDataLog AS tblDataLog_2
WHERE (ParameterId = 2)) AS humidity
FROM dbo.tblDataLog AS tblDataLog_1

masoode
دوشنبه 07 خرداد 1397, 12:04 عصر
148274
نتیجه اون کدی نوشتم این شد!!
منتظر جواب شما هستم

masoode
دوشنبه 07 خرداد 1397, 12:05 عصر
148275
این هم جدول اصلی من به اسم tblDatalog

masoode
سه شنبه 08 خرداد 1397, 08:42 صبح
اگر این کار شدنی نیست بهم بگید تا کلا معماری دیتابیسم را تغییر بدم

Mahmoud.Afrad
سه شنبه 08 خرداد 1397, 23:28 عصر
طبق چه منطقی مقادیر بایست سلکت بشن؟

masoode
پنج شنبه 10 خرداد 1397, 08:22 صبح
طبق چه منطقی مقادیر بایست سلکت بشن؟

بر اساس زمان. باید فیلدهای مربوط به یک زمان واحد روی یک سطر قرار بگیرند. موقع insert کردن دما و رطوبت هم زمان insert می شود. یعنی هر زمان روی یک ردیف تا بتوانم مثلا در این View جداگانه با استفاده از دستور SELECT صد ردیف آخر یا رکوردهای بین دو زمان مشخص را نمایش بدهم

Mahmoud.Afrad
پنج شنبه 10 خرداد 1397, 10:06 صبح
میتونید جدول را با خودش join کنید و دو مقدار را در یک سطر داشته باشید. برای بدست آوردن یک سطر از هر تاریخ از Row_Number استفاده کنید.

masoode
پنج شنبه 10 خرداد 1397, 10:47 صبح
میتونید جدول را با خودش join کنید و دو مقدار را در یک سطر داشته باشید. برای بدست آوردن یک سطر از هر تاریخ از Row_Number استفاده کنید.

من با row_number تا حالا کار نکرده ام! می شه بیشتر توضیح بدید؟

Mahmoud.Afrad
پنج شنبه 10 خرداد 1397, 22:57 عصر
من با row_number تا حالا کار نکرده ام! می شه بیشتر توضیح بدید؟

https://docs.microsoft.com/en-us/sql/t-sql/functions/row-number-transact-sql
https://stackoverflow.com/a/3800572

masoode
شنبه 12 خرداد 1397, 08:31 صبح
خیلی ممنون از پاسختون
اول با row_number این کار را انجام دادم. بعد با ساده کردن Query به یک چیز خیلی مختصر و مفید رسیدم که نیاز به row_number هم نداشت:


SELECT dbo.tblDataLog.DT, dbo.tblDataLog.Value AS Teprature, tblDataLog_1.Value AS Humidity
FROM dbo.tblDataLog AS tblDataLog_1 INNER JOIN
dbo.tblDataLog ON tblDataLog_1.DT = dbo.tblDataLog.DT
WHERE (dbo.tblDataLog.ParameterId = 1) AND (tblDataLog_1.ParameterId = 2)