Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Сложение двух строчкк  [new]
potok21
Member

Откуда:
Сообщений: 155
Добрый день всем!
Есть таблица со следующими столбцами:
ID, TimeBegin, TimeCancel, StatValue
1 00:00 00:30 100
2 00:30 01:00 50
3 01:00 01:30 60
4 01:30 02:00 50
5 02:30 03:00 45
6 03:30 04:00 52
и так далее...
То есть здесь получасовки в столбцах TimeBegin и TimeCanel и значения в StatValue
Мне нужно сложить значение слобца StatValue так чтобы получились часовые значения, то есть сумма 1 и второй строчек, затем 3 и 4 так далее..
Подскажите какой код надо написать на T-SQL или на LINQ. Заранее спасибо!
5 дек 17, 17:28    [21008295]     Ответить | Цитировать Сообщить модератору
 Re: Сложение двух строчкк  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Версия сервера?
Записей количество четное всегда?
5 дек 17, 17:48    [21008350]     Ответить | Цитировать Сообщить модератору
 Re: Сложение двух строчкк  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7780
potok21,

select t1.TimeBegin, 
isnull(t2.TimeCancel,  t1.TimeCancel) TimeCancel, 
t1.StatValue + isnull(t2.StatValue, 0) StatValue 
from t t1
left join t t2 on t1.id + 1 = t2.id
where t1.id % 2 = 1


как-то так.
5 дек 17, 17:51    [21008361]     Ответить | Цитировать Сообщить модератору
 Re: Сложение двух строчкк  [new]
iiyama
Member

Откуда:
Сообщений: 642
declare @t table(id int identity(1,1),Statvalue int)
insert into @t values(100),(60),(50),(42),(52)

select sum(statvalue) from @t group by (id-1)/2 

select t1.Statvalue+isnull(t2.statvalue,0)
from @t t1 left join @t t2 ON t1.id=t2.id-1 
where t1.id%2=1

select * 
from 
(
select t1.id, t1.Statvalue + LEAD(statvalue,1,0)OVER(ORDER BY id) as s 
from @t t1 
)T
where T.id%2=1
5 дек 17, 17:52    [21008371]     Ответить | Цитировать Сообщить модератору
 Re: Сложение двух строчкк  [new]
potok21
Member

Откуда:
Сообщений: 155
Владислав Колосов,

2008 R2, количество записей всегда четное - по 48 позиций. Спасибо за код, буду пробовать!
5 дек 17, 17:53    [21008374]     Ответить | Цитировать Сообщить модератору
 Re: Сложение двух строчкк  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Ну ежели количество строк всегда 48, то базовый NTILE то что тебе надо!

DECLARE @Values TABLE (ID int ,  TimeBegin time , TimeCancel time, StatValue int)  

INSERT INTO @Values SELECT 1, '00:00', '00:30', 100
INSERT INTO @Values SELECT 2, '00:30', '01:00', 50
INSERT INTO @Values SELECT 3, '01:00', '01:30', 60
INSERT INTO @Values SELECT 4, '01:30', '02:00', 50
INSERT INTO @Values SELECT 5, '02:30', '03:00', 45
INSERT INTO @Values SELECT 6, '03:30', '04:00', 52 

SELECT 
 TheSum = SUM(StatValue)    
FROM(
SELECT 

  Grp = NTILE(3) OVER (ORDER BY ID ) 
, V.ID
, V.TimeBEgin 
, V.TimeCancel
, V.StatValue
FROM @Values V

) Z 
GROUP BY Z.Grp 
5 дек 17, 18:07    [21008418]     Ответить | Цитировать Сообщить модератору
 Re: Сложение двух строчкк  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
КМК, тут нужна простая группировка по часу начала...
SELECT 
  [Time] = DATEADD( MINUTE, DATEPART( MINUTE, TimeBegin ), TimeBegin ),
  [Stat] = SUM( StatValue )
FROM
  @Values v
GROUP BY
  DATEADD( MINUTE, DATEPART( MINUTE, TimeBegin ), TimeBegin )
5 дек 17, 18:59    [21008553]     Ответить | Цитировать Сообщить модератору
 Re: Сложение двух строчкк  [new]
iiyama
Member

Откуда:
Сообщений: 642
Руслан Дамирович,

нет, у него разрыв
----
3 01:00 01:30 60
4 01:30 02:00 50
5 02:30 03:00 45
6 03:30 04:00 52
5 дек 17, 19:27    [21008592]     Ответить | Цитировать Сообщить модератору
 Re: Сложение двух строчкк  [new]
iiyama
Member

Откуда:
Сообщений: 642
iiyama,

хотя, прошу прощения, Вы правы, в ТЗ так чтобы получились часовые значения
5 дек 17, 19:29    [21008596]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить