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

Откуда:
Сообщений: 1089
Количество полей конечно и задано. Пока кроме
 select min(a) 
from
(select t.f1 a from mytable t
union all
select t.f2 from mytable
.....) t


идей нет. Как-то хитрее можно?
14 дек 15, 17:16    [18558684]     Ответить | Цитировать Сообщить модератору
 Re: По-хитрее найти минимум значений полей (одного типа) записи с конкрентым id  [new]
iap
Member

Откуда: Москва
Сообщений: 47083
SELECT (SELECT MIN(a) FROM(VALUES(f1),(f2))T(a)) [MIN(a)]
FROM mytable;
Самое быстрое:
SELECT CASE WHEN f1 IS NULL OR f1>=f2 THEN f2 ELSE f1 END [MIN(a)]
FROM mytable;
14 дек 15, 17:26    [18558737]     Ответить | Цитировать Сообщить модератору
 Re: По-хитрее найти минимум значений полей (одного типа) записи с конкрентым id  [new]
Владислав Колосов
Member

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

declare @q table(id int, f1 int, f2 int)
insert @q values (1,2,3)
insert @q values (2,5,6)

select q.id, min(t1.x) xmin
from @q q
cross apply (values (q.f1),(q.f2))t1(x)
group by q.id
14 дек 15, 17:30    [18558758]     Ответить | Цитировать Сообщить модератору
 Re: По-хитрее найти минимум значений полей (одного типа) записи с конкрентым id  [new]
waszkiewicz
Member

Откуда:
Сообщений: 1089
waszkiewicz
Количество полей конечно и задано. Пока кроме
 select min(a) 
from
(select t.f1 a from mytable t
union all
select t.f2 from mytable
.....) t


идей нет. Как-то хитрее можно?


не совсем точно выразился - полей больше трех. В реале - 6-10 (для разных таблиц)
Чего хочется - для разных наблюдений - разное количество оценок. Нужно выбрать для конкретной записи (и конкретной таблицы) лимитирующий фактор (минимальное значение)
14 дек 15, 19:48    [18559297]     Ответить | Цитировать Сообщить модератору
 Re: По-хитрее найти минимум значений полей (одного типа) записи с конкрентым id  [new]
waszkiewicz
Member

Откуда:
Сообщений: 1089
Разделю таблицу все-таки. Пока возмость есть.
14 дек 15, 20:13    [18559391]     Ответить | Цитировать Сообщить модератору
 Re: По-хитрее найти минимум значений полей (одного типа) записи с конкрентым id  [new]
steel_plate
Member

Откуда:
Сообщений: 3
waszkiewicz, думаю, вам поможет unpivot (https://technet.microsoft.com/ru-ru/library/ms177410(v=sql.105).aspx):

declare @q table(id int, f1 int, f2 int, f3 int, f4 int)
insert @q values (1,2,3,2,1),(2,5,6,-1,10),(3,10,1,2,0)

select *
from @q

idf1f2f3f4
12321
256-110
310120


select id, f, val
from  @q
unpivot(val -- название столбца со значениями 
        for f -- название столбца, в который попадут названия "развернутых" столбцов
        in(f1,f2,f3,f4) -- список столбцов, которые разворачиваем
       ) as a

idfval
1f12
1f23
1f32
1f41
2f15
2f26
2f3-1
2f410
3f110
3f21
3f32
3f40


select min(val) as MinF
from  @q
unpivot(val for f in(f1,f2,f3,f4)) as a


MinF
-1
14 дек 15, 20:49    [18559516]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить