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

Откуда:
Сообщений: 347
у меня есть таблица
id, имя_параметра, значение, источник
1, параметр1, 2, 1001
2, параметр2, 0, 1001
3, параметр3, 0, 1001
4, параметр 1, 1, 1002
5, параметр 2, 4, 1002
6, параметр 3, 5, 1002
7, параметр 1, 1, 1002

хочу получить так

источник, параметр1, параметр2, параметр3
1001, 1,0,1
1002, 0,0,1
1003, 0,0,1
1001, 0,0,1
3 фев 12, 07:41    [12023652]     Ответить | Цитировать Сообщить модератору
 Re: Как построить обобщенную таблицу?  [new]
Max_Tpop
Member

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

Если я правильно понял, то походу надо двигаться в сторону PIVOT'ов
3 фев 12, 07:48    [12023656]     Ответить | Цитировать Сообщить модератору
 Re: Как построить обобщенную таблицу?  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
Max_Tpop
Rebelint,

Если я правильно понял, то походу надо двигаться в сторону PIVOT'ов

case тоже рулит, может у тс 2000 сервер ?
3 фев 12, 08:05    [12023676]     Ответить | Цитировать Сообщить модератору
 Re: Как построить обобщенную таблицу?  [new]
Rebelint
Member

Откуда:
Сообщений: 347
Max_Tpop
Rebelint,

Если я правильно понял, то походу надо двигаться в сторону PIVOT'ов

ну вроде как... но чето не догоняю как именно

PS sql 2008
3 фев 12, 15:18    [12027462]     Ответить | Цитировать Сообщить модератору
 Re: Как построить обобщенную таблицу?  [new]
squid
Member

Откуда: LA
Сообщений: 590
Rebelint
у меня есть таблица
id, имя_параметра, значение, источник
1, параметр1, 2, 1001
2, параметр2, 0, 1001
3, параметр3, 0, 1001
4, параметр 1, 1, 1002
5, параметр 2, 4, 1002
6, параметр 3, 5, 1002
7, параметр 1, 1, 1002

хочу получить так

источник, параметр1, параметр2, параметр3
1001, 1,0,1
1002, 0,0,1
1003, 0,0,1
1001, 0,0,1




что то типа такого

declare @t table (id int, name varchar(10), value int, source int)
insert into @t VALUES
  (1, 'param1', 2, 1001),
  (2, 'param2', 0, 1001),
  (3, 'param3', 0, 1001),
  (4, 'param1', 1, 1002),
  (5, 'param2', 4, 1002),
  (6, 'param3', 5, 1002),
  (7, 'param1', 1, 1002)
  
select * FROM @t  

SELECT Source, param1, param2,param3
FROM @t
PIVOT
(
  COUNT(value) FOR name in ([param1], [param2], [param3])
) as  TP



Правда ваш пример кривой и не совсем понятно как образовался результат.
Напишите детальней.
3 фев 12, 15:53    [12027976]     Ответить | Цитировать Сообщить модератору
 Re: Как построить обобщенную таблицу?  [new]
Rebelint
Member

Откуда:
Сообщений: 347
Происходит группировка по источнику. Для каждого источника в строке должны быть 3 поля соответсвующие каждому параметру.

должно получится чтото вроде
SELECT  [источник], [параметр1] AS п1, [параметр2] as п2,[параметр3] AS п3
FROM 
(SELECT (SELECT [источник] ,[имя_параметра] FROM [Tbl])p

PIVOT
(
  COUNT([источник] )   FOR  [имя_параметра] in ( [параметр1], [параметр2], [параметр3])
) as  TP

только ошибка
Сообщение 156, уровень 15, состояние 1, строка 6
Неправильный синтаксис около ключевого слова "PIVOT"
6 фев 12, 07:08    [12037985]     Ответить | Цитировать Сообщить модератору
 Re: Как построить обобщенную таблицу?  [new]
Max_Tpop
Member

Откуда:
Сообщений: 103
Rebelint
Происходит группировка по источнику. Для каждого источника в строке должны быть 3 поля соответсвующие каждому параметру.

должно получится чтото вроде
(SELECT (SELECT [источник] ,[имя_параметра] FROM [Tbl])p

только ошибка
Сообщение 156, уровень 15, состояние 1, строка 6
Неправильный синтаксис около ключевого слова "PIVOT"


Естественно, первый селект к чему относиться? Можно и без него обойтись. Либо закрывающую скобку поставить! Синтаксис проверять надо!
6 фев 12, 08:02    [12038011]     Ответить | Цитировать Сообщить модератору
 Re: Как построить обобщенную таблицу?  [new]
Rebelint
Member

Откуда:
Сообщений: 347
Да, получилось, но не то что нужно. В конечных столбцах выводится просто количество, а мне нужно содержимое.
6 фев 12, 14:37    [12040624]     Ответить | Цитировать Сообщить модератору
 Re: Как построить обобщенную таблицу?  [new]
iljy
Member

Откуда:
Сообщений: 8711
Rebelint
Да, получилось, но не то что нужно. В конечных столбцах выводится просто количество, а мне нужно содержимое.

Так замените агрегирующую функцию.
6 фев 12, 14:42    [12040662]     Ответить | Цитировать Сообщить модератору
 Re: Как построить обобщенную таблицу?  [new]
Rebelint
Member

Откуда:
Сообщений: 347
как можно агрегировать эти значения?
27
23
1
1
01.02.2011 0:00:00
23
01.07.2011 0:00:00
01.05.2011 0:00:00
19
01.02.2011 0:00:00
1
01.10.2011 0:00:00


похоже мы о разном говорим
6 фев 12, 20:26    [12043514]     Ответить | Цитировать Сообщить модератору
 Re: Как построить обобщенную таблицу?  [new]
Rebelint
Member

Откуда:
Сообщений: 347
вот реальные данные

SELECT * FROM dbo.Values

автор
id NameParam ValueParam iвTerminal
F4B411A3-DFEB-4F94-AC88-00A73CABA998 Сигнал 27 485778
83823380-62B9-4B63-ACEE-00D216E29227 Сигнал 23 485678
020D5FAB-48A1-4367-8C80-012A6A5FBB5E ОпСос 1 485678
00ACDD2E-9F5A-4C25-9C8A-014855C35A2B ОпСос 1 486528
E93F5955-BB52-47D8-A943-014B33BAF9E0 Активация 01.02.2011 0:00 485869
84319345-BC50-4AE6-9973-017E116F7753 Сигнал 23 486614
8968A0C0-CDBD-4071-841C-018883A6375F Активация 01.07.2011 0:00 485749
86879BC7-D220-41DE-8CEF-01D50CF28D3B Активация 01.05.2011 0:00 485660
46104AB5-5525-4450-BA81-02549E3E519F Сигнал 19 485812
11DDF50B-6FB2-449E-8D0F-02BC4CD30202 Активация 01.02.2011 0:00 485870
F1BFFC10-29B2-4025-883E-0317ACCBAA3F ОпСос 1 485626
9B56D5E4-EED7-4E33-AFED-036BEEF8C4F2 Активация 01.10.2011 0:00 486588


SELECT idTerminal, [ОпСос] e1, [Активация] e2, [Сигнал] e3
  FROM ( 
          SELECT idTerminal,id, nameparam FROM dbo.Values
       ) AS t PIVOT 
(count(id) FOR nameparam IN ( [ОпСос], [Активация],[Сигнал] ) ) AS tp


автор
idTerminal e1 e2 e3
485611 1 1 1
485613 1 1 1
485614 1 1 1
485615 1 1 1
485617 1 1 1
485619 1 1 1


а должно быть

автор
idTerminal e1 e2 e3
485611 27 1 01.07.2011 0:00
6 фев 12, 20:31    [12043528]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить