Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2014.04.27;
Скачать: CL | DM;

Вниз

Подскажите как получить таблицу-матрицу запросом в MSSQL   Найти похожие ветки 

 
Гость   (2011-02-09 14:48) [0]

Есть таблица, tVal, поля Id int, AName char(10),  SName char(10), Val int
значения примерно такие (без id)
Adaeva Natalya     IS_KR_SG     1
Adaeva Natalya     IS_KR_MSP_SG     0
Alesova Ludmila     IS_ML_SG     0
Alesova Ludmila     IS_CH_SG     1
Alyamkina Marina     SIS_UL_SG     1
Alyamkina Marina     SIS_UD_SG     0
...
смысл такой
Опертор (AName) зарегистрирован (Val) в службе (SName)
Val = 0 зарегистрирован, но не активен
Val = 1 зарегистрирован и активен
нет пары AName-SName - не зарегистрирован

хочу получить таблицу
             
              служба1   служба2   служба3
оператор1     nul            0             1
оператор2      1             0             nul
оператор3     nul           nul            1
....

циклами по датасету сделал, а теперь хочу одним запросом.
как?


 
Игорь Шевченко ©   (2011-02-09 15:04) [1]

SUM(CASE ... WHEN ...)

Это ANSI SQL


 
Игорь Шевченко ©   (2011-02-09 15:12) [2]

пример для oracle где-то такой:

WITH tab AS (
 SELECT "Adaeva Natalya" AS aname,"IS_KR_SG" AS sname,1 AS val FROM dual
 UNION ALL
 SELECT "Adaeva Natalya" AS aname,"IS_KR_MSP_SG" AS sname,0 AS val FROM dual
 UNION ALL
 SELECT "Alesova Ludmila" AS aname,"IS_ML_SG" AS sname,1 AS val FROM dual
 UNION ALL
 SELECT "Alesova Ludmila" AS aname,"IS_CH_SG" AS sname,0 AS val FROM dual
)
SELECT aname,
      SUM(CASE WHEN sname = "IS_KR_SG" THEN VAL ELSE 0 END) IS_KR_SG,
      SUM(CASE WHEN sname = "IS_KR_MSP_SG" THEN VAL ELSE 0 END) IS_KR_MSP_SG,
      SUM(CASE WHEN sname = "IS_ML_SG" THEN VAL ELSE 0 END) IS_ML_SG,
      SUM(CASE WHEN sname = "IS_CH_SG" THEN VAL ELSE 0 END) IS_CH_SG
 FROM tab
GROUP BY aname


 
Inovet ©   (2011-02-09 16:08) [3]

> [1] Игорь Шевченко ©   (09.02.11 15:04)
> SUM(CASE ... WHEN ...)

А не кросс автору надо?


 
Игорь Шевченко ©   (2011-02-09 16:10) [4]


> А не кросс автору надо?


ты изъясняйся понятно, если не трудно


 
Гость   (2011-02-09 16:27) [5]

Inovet ©
нет.

Игорь Шевченко ©   (09.02.11 15:12) [2]
правильно, так подумал потом
но у меня не известно заранее, ни размер по X, ни по Y
т.е. Операторы и службы - обе величины динамические


 
sniknik ©   (2011-02-09 16:32) [6]

для MSSQL не особо отличается
SELECT AName,
     SUM(CASE WHEN SName = "IS_KR_SG" THEN VAL ELSE NULL END) AS IS_KR_SG,
     SUM(CASE WHEN sname = "IS_KR_MSP_SG" THEN VAL ELSE NULL END) AS IS_KR_MSP_SG,
     SUM(CASE WHEN sname = "IS_ML_SG" THEN VAL ELSE NULL END) AS IS_ML_SG,
     SUM(CASE WHEN sname = "IS_CH_SG" THEN VAL ELSE NULL END) AS IS_CH_SG
FROM tVal
GROUP BY AName

> т.е. Операторы и службы - обе величины динамические
операторы пофиг (в [2] операторы фигурируют только затем чтобы реальную таблицу не создавать, в mssql это подзапрос), т.к. по ним группировка, а из-за служб придется динамически запрос формировать.

> А не кросс автору надо?
скорее всего оно и есть


 
sniknik ©   (2011-02-09 16:34) [7]

> придется динамически запрос формировать.
хотя... может в старших версиях mssql уже ввели pivot table как в акцессе... тогда может и не придется. (у меня просто 2000й)


 
Abramov Petr V.   (2011-02-09 21:46) [8]

как получить таблицу-матрицу запросом в MSSQL
я не знаю, но для отображения (а для чего еще, не представляю), можно девэекспересс или фастрепорт использовать, и там, и там все по нонешним временам грамотно в этом плане.


 
Inovet ©   (2011-02-10 05:17) [9]

> [4] Игорь Шевченко ©   (09.02.11 16:10)
> > А не кросс автору надо?
>
> ты изъясняйся понятно, если не трудно

Вот об этом

> [5] Гость   (09.02.11 16:27)
> но у меня не известно заранее, ни размер по X, ни по Y

Кросс-таблица. Ну и правильно уже заметили, что такое обычно бывает надо для просмотра или печати, значит и средства можно использовать специальные ФР, например.


 
stas ©   (2011-02-10 17:37) [10]

sniknik ©   (09.02.11 16:34) [7]
Не как в акцессе еще не придумали. есть pivot но надо явно указывать колонки.


 
stas ©   (2011-02-10 17:39) [11]

Inovet ©   (10.02.11 05:17) [9]
пишите хранимку которая будет строить динамический запрос и выполнять его. Т.е. то что написал  sniknik ©   (09.02.11 16:32) [6]
только должна запихнуть ваша хранимка в текстовую переменную, которую потом запустить на выполнение.


 
sniknik ©   (2011-02-10 17:49) [12]

> Не как в акцессе еще не придумали.
вообще то есть начиная с 2005 если верить msdn.


 
sniknik ©   (2011-02-10 17:51) [13]

http://msdn.microsoft.com/en-us/library/ms177410%28v=SQL.90%29.aspx


 
stas ©   (2011-02-11 14:13) [14]

sniknik ©   (10.02.11 17:51) [13]
Да сделали, но как я понял там фиксированное количество столбцов.
т.е. в акцессе, на этапе построения запроса я не указываю количество столбцов, а тут приходится указывать и давать им названия.


 
sniknik ©   (2011-02-11 14:21) [15]

> а тут приходится указывать и давать им названия.
не приходится. можно. в акцессе  аналогично, можно давать, можно нет.


 
stas ©   (2011-02-11 14:31) [16]

sniknik ©   (11.02.11 14:21) [15]
У меня чего-то не получилось не указывать. Мог конечно не разобраться.


 
Гость   (2011-02-15 09:18) [17]

сделал примерно как Игорь Шевченко ©   (09.02.11 15:12) [2] советовал

только сначала select distinct SNAME пришлось спросить, потом курсор открыть для формирования запроса, а потом его запускать.

А начальник смешнее сделал - он в excel мою портянку загнал, и как-то там в 3 клика получил что надо :)

Учите люди Excel...


 
stas ©   (2011-02-16 17:28) [18]

Гость   (15.02.11 09:18) [17]
>он в excel мою портянку загнал
Называется сводная таблица.



Страницы: 1 вся ветка

Текущий архив: 2014.04.27;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.005 c
3-1297252094
Гость
2011-02-09 14:48
2014.04.27
Подскажите как получить таблицу-матрицу запросом в MSSQL


15-1383465477
Интересующися
2013-11-03 11:57
2014.04.27
Ищу компонент (наверно какой-то TPanel)


15-1383645741
Sign
2013-11-05 14:02
2014.04.27
COM объект на .NET вызов из Delphi


15-1383227337
брат Птибурдукова
2013-10-31 17:48
2014.04.27
"Сейчас позднее, чем ты думаешь"


15-1383590956
KilkennyCat
2013-11-04 22:49
2014.04.27
как работает механизм установления соединения с MySQL?