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

Откуда:
Сообщений: 139
Подскажите, пожалуйста. не знаю даже как лучше сформулировать.
Есть таблица со столбцами: Datetime, Paramid (key), Value.
Необходимо перемножить(или сложить) соответствующие значения в столбце Value в строках с соответствующих значениями Paramid(1) и Paramid(401), Paramid(2) и Paramid(402), ... Paramid(100) и Paramid(400), Paramid(201) и Paramid(601), Paramid(202) и Paramid(602),...
+

GO
CREATE TABLE dbo.Table_1
	(
	paramid int NOT NULL,
	datetime smalldatetime NOT NULL,
	value int NOT NULL
	)  ON [PRIMARY]
GO
ALTER TABLE dbo.Table_1 ADD CONSTRAINT
	PK_Table_1 PRIMARY KEY CLUSTERED 
	(
	paramid
	) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]


insert into dbo.Table_1 values (1, '01.11.2015 00:00', 789)
insert into dbo.Table_1 values (2, '01.11.2015 00:00', 785)
insert into dbo.Table_1 values (401, '01.11.2015 00:00', 789)
insert into dbo.Table_1 values (402, '01.11.2015 00:00', 789)
insert into dbo.Table_1 values (201, '01.11.2015 00:00', 789)
insert into dbo.Table_1 values (202, '01.11.2015 00:00', 789)
insert into dbo.Table_1 values (601, '01.11.2015 00:00', 789)
insert into dbo.Table_1 values (602, '01.11.2015 00:00', 789)

10 ноя 15, 23:01    [18397528]     Ответить | Цитировать Сообщить модератору
 Re: Попарные действия с определлыми ячейка в таблице.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
ncux199rus
Необходимо перемножить(или сложить) соответствующие значения в столбце Value в строках с соответствующих значениями Paramid(1) и Paramid(401), Paramid(2) и Paramid(402), ... Paramid(100) и Paramid(400), Paramid(201) и Paramid(601), Paramid(202) и Paramid(602),...
Так перемножайте.
Джойн двух копий таблицы.
select t1.value * t2.value, t1.value + t2.value
from dbo.Table_1 t1
    join dbo.Table_1 t2
        on t1.Paramid = t2.Paramid + 400
        and t1.datetime = t2.datetime
10 ноя 15, 23:22    [18397569]     Ответить | Цитировать Сообщить модератору
 Re: Попарные действия с определлыми ячейка в таблице.  [new]
ncux199rus
Member

Откуда:
Сообщений: 139
alexeyvg
Джойн двух копий таблицы.

Вот спасибо.
А вот как быть если выборка произвольная? Скажем 1 сотня с 4, 3 с 5, 2 с 8.
10 ноя 15, 23:39    [18397601]     Ответить | Цитировать Сообщить модератору
 Re: Попарные действия с определлыми ячейка в таблице.  [new]
ncux199rus
Member

Откуда:
Сообщений: 139
Кроме как
where t2.table_1 between 1 and 100  

и каждый кусок склеивать
 
union
 
11 ноя 15, 00:01    [18397647]     Ответить | Цитировать Сообщить модератору
 Re: Попарные действия с определлыми ячейка в таблице.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
ncux199rus
А вот как быть если выборка произвольная? Скажем 1 сотня с 4, 3 с 5, 2 с 8.
В смысле, если условия более сложные, чем id = id + 400?

Можно сложные условия тоже записать, не только простые. Например, используя case или какие то математические выражения.
Или сделать специальную таблицу соответствий диапазонов.

Вообще говоря, это довольно странная реализация связей бизнес-сущностей, в виде математической формулы с ID :-)
Обычно для связывания используют специально сделанные для этого поля. Пока не поздно, подкорректируйте модель данных.
11 ноя 15, 01:19    [18397801]     Ответить | Цитировать Сообщить модератору
 Re: Попарные действия с определлыми ячейка в таблице.  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20600
ncux199rus
вот как быть если выборка произвольная? Скажем 1 сотня с 4, 3 с 5, 2 с 8.

Отдельная таблица, задающая пары AjacentTable(key1, key2). И две копии исходной таблицы.
select t1.value * t2.value, t1.value + t2.value
from dbo.Table_1 t1,dbo.Table_1 t2,dbo.AjacentTable t12
where t1.Paramid = t12.key1
  and t2.Paramid = t12.key2
  and t1.datetime = t2.datetime

Для "сложных" условий (диапазонов) это может быть и AjacentTable(key1, key2from, key2to), и даже AjacentTable(key1from, key1to, key2from, key2to), и соответственно between-условия.
11 ноя 15, 09:12    [18398269]     Ответить | Цитировать Сообщить модератору
 Re: Попарные действия с определлыми ячейка в таблице.  [new]
ncux199rus
Member

Откуда:
Сообщений: 139
alexeyvg
Вообще говоря, это довольно странная реализация связей бизнес-сущностей, в виде математической формулы с ID :-)
Обычно для связывания используют специально сделанные для этого поля. Пока не поздно, подкорректируйте модель данных.

Возможно.
ParamId - перечень технологических параметров по каждому сооружению. 1-100 - давление, 101-200 - температура, и т.д.
В таблице хранятся мгновенные технологические значения получаемые с приборов. Для формирования отчета технологу необходимы агрегатные действия над группами этих значений. Самое простое это вычислить эти значения в sql нежели в приложении.
Где ошибка?
13 ноя 15, 10:05    [18410541]     Ответить | Цитировать Сообщить модератору
 Re: Попарные действия с определлыми ячейка в таблице.  [new]
Beaver
Member

Откуда:
Сообщений: 210
ncux199rus
alexeyvg
Вообще говоря, это довольно странная реализация связей бизнес-сущностей, в виде математической формулы с ID :-)
Обычно для связывания используют специально сделанные для этого поля. Пока не поздно, подкорректируйте модель данных.

Возможно.
ParamId - перечень технологических параметров по каждому сооружению. 1-100 - давление, 101-200 - температура, и т.д.
В таблице хранятся мгновенные технологические значения получаемые с приборов. Для формирования отчета технологу необходимы агрегатные действия над группами этих значений. Самое простое это вычислить эти значения в sql нежели в приложении.
Где ошибка?


Вы температуру с давлением складываете? Или умножаете?

ЗЫ. Смотрите в сторону представлений. Для каждого параметра своё представление. CREATE VIEW рулит.
13 ноя 15, 10:16    [18410623]     Ответить | Цитировать Сообщить модератору
 Re: Попарные действия с определлыми ячейка в таблице.  [new]
ГуЗы
Guest
Beaver
...
Вы температуру с давлением складываете? Или умножаете?
...

Off:
Правильнее всего делить!
13 ноя 15, 10:54    [18410856]     Ответить | Цитировать Сообщить модератору
 Re: Попарные действия с определлыми ячейка в таблице.  [new]
ncux199rus
Member

Откуда:
Сообщений: 139
На данный момент самый простой способ, как оказалось, через join. Только надо аккуратно подойти к сдвигу по ключу.
запрос выглядит так
+

SELECT d1.DateTime,  d1.Value*d2.Value*d3.Value as value
FROM dbo.Table_1 as d1 
join dbo.Table_1 as d2 on d1.ParamId = d2.ParamId +59 and d1.DateTime=d2.DateTime
join dbo.Table_1 as d3 on d1.ParamId = d3.ParamId + 177  and d1.DateTime=d3.DateTime
where d2.ParamId between 237 and 295 and  YEAR(d2.DateTime) = DATEPART(yyyy,@datetime) and MONTH(d2.DateTime)=DATEPART(m,@datetime)

Akina, Вы имеете ввиду создание отдельной таблицы соответствий?
13 ноя 15, 11:13    [18410972]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить