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

Откуда:
Сообщений: 20
Доброго времени суток.
Есть следующая таблица
Id MaterialID ParameterName ParameterValue
1 1 temperatureMin -10
2 1 temperatureMax +3
3 1 voltageMin 180
4 1 voltageMax 230

Необходимо вывести результат в следующем виде
Min Max
Temperature -10 +3
Voltage 180 230

Я так понял, что для этого нужно использовать pivot, но что-то не получается....
14 дек 11, 11:58    [11762750]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом Pivot  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
declare @t table(Id int, MaterialID int, ParameterName varchar(15), ParameterValue varchar(10))
insert @t values
(1, 1, 'temperatureMin', '-10'),
(2, 1, 'temperatureMax', '+3'),
(3, 1, 'voltageMin', '180'),
(4, 1, 'voltageMax', '230')

select 'Temperature' as name
       ,min(case when ParameterName = 'temperatureMin' then ParameterValue end) as [Min]
       ,min(case when ParameterName = 'temperatureMax' then ParameterValue end) as [Max]
  from @t
union all
select 'Voltage' as name
       ,min(case when ParameterName = 'voltageMin' then ParameterValue end) as [Min]
       ,min(case when ParameterName = 'voltageMax' then ParameterValue end) as [Max]
  from @t

name        Min        Max
----------- ---------- ----------
Temperature -10        +3
Voltage     180        230
Warning: Null value is eliminated by an aggregate or other SET operation.

(2 row(s) affected)
14 дек 11, 12:12    [11762852]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом Pivot  [new]
Dima_Tr_
Member

Откуда:
Сообщений: 20
Спасибо, работает!
Скажите, а через pivot это все-таки можно сделать?
14 дек 11, 13:52    [11763903]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом Pivot  [new]
зшмще
Guest
Dima_Tr_,

declare @t table(Id int, MaterialID int, ParameterName varchar(15), ParameterValue int)
insert @t values
(1, 1, 'temperatureMin', -10),
(2, 1, 'temperatureMax', 3),
(3, 1, 'voltageMin', 180),
(4, 1, 'voltageMax', 230)

select
	n, [1] min, [2] max
from (
select
	REPLACE(REPLACE(ParameterName,'max',''),'min','') n, ParameterValue v, ROW_NUMBER() over (partition by REPLACE(REPLACE(ParameterName,'max',''),'min','') order by ParameterValue) r
from 
	@t
) a
pivot (
	max(v) for r in ([1], [2])
) p
14 дек 11, 14:21    [11764234]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом Pivot  [new]
зшмще
Guest
зшмще,

с реплейсом что то намудрил :)
лучше просто убирать последние 3 символа
14 дек 11, 14:25    [11764288]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом Pivot  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
зшмще
с реплейсом что то намудрил :)
коллейшн регистрозависимый?
14 дек 11, 14:27    [11764304]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить