Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите с запросом

3.4K
05 июля 2010 года
mag23
35 / / 04.07.2004
Существует таблица с полями
Time Id Value
20:45 1 45
20:45 2 57
20:45 3 75
21:00 1 34
21:00 2 25
21:00 3 87
22:00 1 14
22:00 2 12
22:00 3 41

Нужно сделать таблицу,чтобы Id отображалось в верхней строчке(т.е. столбцы),а Time было в самом первом столбце.На их пересечении естественно должно быть Value.
Несколько лет назад я подобное делал,но уже все позабыл.
3.4K
05 июля 2010 года
mag23
35 / / 04.07.2004
Спасибо,попробую
279
07 июля 2010 года
bave
456 / / 07.03.2004
mag23, для какой СУБД?

например, на t-sql это легко сделать через pivot - особенно в твоем случае....
9.9K
03 августа 2010 года
maxFM
77 / / 18.04.2007
bave pivout идет только начиная с sql2005
3.4K
04 августа 2010 года
mag23
35 / / 04.07.2004
MSSQL 2000
Может какие компоненты(Dridы) есть?
9.9K
04 августа 2010 года
maxFM
77 / / 18.04.2007
DevExpress -> Pivout
385
04 августа 2010 года
SomewherSomehow
477 / / 25.07.2004
Ну вот вам, например, для 2000, этакий пивот.
Код:
-- тестовые данные
declare @tab table ([Time] varchar(5), Id int, Value int)
insert into @tab
select '20:45', 1, 45 union all
select '20:45', 2, 57 union all
select '20:45', 3, 75 union all
select '21:00', 1, 34 union all
select '21:00', 2, 25 union all
select '21:00', 3, 87 union all
select '22:00', 1, 14 union all
select '22:00', 2, 12 union all
select '22:00', 3, 41

-- запросег
select
    base.Time,
    [1] = id1.value,
    [2] = id2.value,
    [3] = id3.value    
from
    -- строки ИДшника, которому соответсвует максимальное кол-во строк (выбиарем только время)
    (
        select top 1 with ties
            t1.Time
        from @tab t1
        order by
            (select count(*) from @tab t2 where t2.id = t1.id) desc,
            id
    ) base
    -- джойинм (по времени) по порядку для того кол-ва столбцов, которое нам нужно (в данном случае 3 разные ИДшки, значит для трех)
    left join @tab id1 on base.[time] = id1.[time] and id1.id = 1
    left join @tab id2 on base.[time] = id2.[time] and id2.id = 2
    left join @tab id3 on base.[time] = id3.[time] and id3.id = 3

Но есть одно НО, время в рамках ИД должно быть уникальным, иначе невозможно будет строке времени однозначно поставить в соответвие то или иное Value.
И еще, если кол-во ИДшек - произвольное, то тут вам и в 2005 обычный пивот не поможет, т.к. там число колонок тоже строко фиксированное. В таком случае, решение - использовать динамику. Но при этом нужно всегда помнить что произвольное кол-во столбцов - признак не оч.хорошего проектирвоания БД и часто ненужная псевдоуниверсальность.
Удачи!
3.4K
05 августа 2010 года
mag23
35 / / 04.07.2004
Цитата: maxFM
DevExpress -> Pivout



У меня DevExpress 4.0 ,но компонента Pivot я там не встречал.

9.9K
05 августа 2010 года
maxFM
77 / / 18.04.2007
Цитата: mag23
У меня DevExpress 4.0 ,но компонента Pivot я там не встречал.



Вкладка DevExpess
cxPivoutGrid,cxDBPivoutGrid и т.д.

а вообще даже в самом Borland есть стандартный набор компонентов как в разделе Cube. Но я с ними не работал и советовать не стану!!!:):):):)

3.4K
05 августа 2010 года
mag23
35 / / 04.07.2004
Цитата: maxFM
Вкладка DevExpess
cxPivoutGrid,cxDBPivoutGrid и т.д.

а вообще даже в самом Borland есть стандартный набор компонентов как в разделе Cube. Но я с ними не работал и советовать не стану!!!:):):):)



У меня только dxDBGrid и cxGrid.Наверное версия DevExpres старая.

385
06 августа 2010 года
SomewherSomehow
477 / / 25.07.2004
Компоненты и работу с ними настойчиво предлагаю обсуждать в соответствующем разделе форума.
3.4K
06 августа 2010 года
mag23
35 / / 04.07.2004
Настойчиво поддерживаю.
Кстати спасибо за ответ.Но у меня количество IDешек варьируется от 1 до 100.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог