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

Откуда:
Сообщений: 10
Добрый вечер!
Мне нужно сделать запрос из нескольких таблиц на выборку, где код причины = "+"
Что у меня успешно получилось
use ds

SELECT gr.kod_vozr_gr, Posesh.Data, Posesh.kod_prich
FROM gr INNER JOIN (vosp INNER JOIN Posesh ON Vosp.kod_vosp = Posesh.kod_vosp) ON gr.kod_gr = vosp.kod_gr
WHERE Posesh.kod_prich = '+';

А теперь мне нужно сделать групповой запрос, где слева будет Kod_vozr_gr, сверху дата, а на пересечении Count (кол-во строк)


Другими словами, у меня есть список посещения детьми детского сада, где ведется ежедневный учет. Также каждый день мне нужно подсчитывать кол-во детей (отдельно ясли, отдельно детский сад (kod_vozr_gr =1 - это ясли , kod_vozr_gr =2 детский сад)), то есть мы выделяем те строки, где посещение детей = +, а дальше их считаем, группируя по дате и kod_vozr_gr

Вот групповой запрос
use ds
SELECT gr.kod_vozr_gr , Posesh.Data, Count( posesh.kod_prich)
FROM gr INNER JOIN (vosp INNER JOIN Posesh ON Vosp.kod_vosp = Posesh.kod_vosp) ON gr.kod_gr = vosp.kod_gr
GROUP BY gr.kod_vozr_gr, Posesh.Data;


Мне нужно их как-то соединить
Или просто сделать второй запрос, но с выборкой

Только не могу понять как сделать

К сообщению приложен файл. Размер - 142Kb
11 май 15, 21:08    [17626346]     Ответить | Цитировать Сообщить модератору
 Re: Групповой запрос sql  [new]
pivot-pivot
Guest
Zoya_1,
[url=]https://www.sql.ru/forum/1155930/uproshhenie-tablicy-putyom-sozdaniya-stolbcov[/url]
12 май 15, 09:48    [17627260]     Ответить | Цитировать Сообщить модератору
 Re: Групповой запрос sql  [new]
Glory
Member

Откуда:
Сообщений: 104751
Zoya_1
Мне нужно их как-то соединить
Или просто сделать второй запрос, но с выборкой

Лучше всего вам ткнуть на иконку Access и там сделать мышкой сделать перекрестный отчет
12 май 15, 09:50    [17627270]     Ответить | Цитировать Сообщить модератору
 Re: Групповой запрос sql  [new]
Zoya_1
Member

Откуда:
Сообщений: 10
Glory,в Акцессе то как раз все получается, а как подобное на скл сделать
12 май 15, 19:01    [17630590]     Ответить | Цитировать Сообщить модератору
 Re: Групповой запрос sql  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8839
Zoya_1,
"шахматка" - задача прикладного уровня, если не ошибаюсь, ее можно решить при помощи отчета Reporting Services. Не силен в отчетах.
12 май 15, 21:30    [17631073]     Ответить | Цитировать Сообщить модератору
 Re: Групповой запрос sql  [new]
Glory
Member

Откуда:
Сообщений: 104751
Zoya_1
Glory,в Акцессе то как раз все получается, а как подобное на скл сделать

Если вы думаете, что это делается одним запросом, то вы ошибаетесь
Для переменного числа дат это будет скрипт из многих команд
13 май 15, 08:26    [17632018]     Ответить | Цитировать Сообщить модератору
 Re: Групповой запрос sql  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31994
Zoya_1
а как подобное на скл сделать
Поищите на этом форуме по словам PIVOT, отбирайте решения для неизвестного зараннее количества колонок, то есть с "динамическим SQL"
13 май 15, 09:14    [17632142]     Ответить | Цитировать Сообщить модератору
 Re: Групповой запрос sql  [new]
Merdoc
Member

Откуда: Новосибирск
Сообщений: 103
Zoya_1,
Тут описан способ PIVOT с динамическим SQL
http://social.technet.microsoft.com/wiki/contents/articles/17510.t-sql-dynamic-pivot-on-multiple-columns.aspx
13 май 15, 09:21    [17632168]     Ответить | Цитировать Сообщить модератору
 Re: Групповой запрос sql  [new]
Merdoc
Member

Откуда: Новосибирск
Сообщений: 103
Zoya_1,
если количество дат конечное, то можно такой вариант
DECLARE @datestring nvarchar(500)
DECLARE @execstring nvarchar(4000)
set @datestring =(select distinct '['+cast(Data as nvarchar(20))+']' + ', ' from Posesh FOR XML PATH(''))
set @datestring =(SELECT SUBSTRING(@datestring , 1, LEN(@datestring ) - 1))
set @execstring =
N'
SELECT 
*
FROM
(
SELECT gr.kod_vozr_gr , Posesh.Data, posesh.kod_prich
FROM gr INNER JOIN (vosp INNER JOIN Posesh ON Vosp.kod_vosp = Posesh.kod_vosp) ON gr.kod_gr = vosp.kod_gr
GROUP BY gr.kod_vozr_gr, Posesh.Data;
) AS SourceTable
PIVOT
(
count(kod_prich)
FOR Data IN ('+@datestring+')
) AS PivotTable
'
execute sp_executesql @execstring 
13 май 15, 09:49    [17632293]     Ответить | Цитировать Сообщить модератору
 Re: Групповой запрос sql  [new]
ГуЗы
Guest
Zoya_1,
Почему-то все путают 2 вещи: получение данных и их представление.
А пользователи всегда хотят получить даты в колонках, а все остальное - в строках.
Делаешь запрос, копируешь данные и вставляешь в ексель - форматировать, как таблицу - сводная. И будет тебе счастье.
А если речь идет об отчете, то это же самое может сделать любой генератор отчетов.
13 май 15, 10:39    [17632537]     Ответить | Цитировать Сообщить модератору
 Re: Групповой запрос sql  [new]
Merdoc
Member

Откуда: Новосибирск
Сообщений: 103
ГуЗы,
Просто людям обычно хочется видеть конечный отчет побыстрее и меньше заморачиваться (или вообще не заморачиваться) на промежуточных изменениях (вроде создания сводной таблицы из обычной в Excel).
На мой взгляд адекватное желание, хоть и требующее иногда больших усилий со стороны ИТ.
13 май 15, 13:02    [17633581]     Ответить | Цитировать Сообщить модератору
 Re: Групповой запрос sql  [new]
o-o
Guest
Merdoc
Просто людям обычно хочется видеть конечный отчет побыстрее и меньше заморачиваться (или вообще не заморачиваться)

ну так Репортинг же.
даже в Экспрессе (with Advanced Tools) есть.
там визард -- только вклей нужный запрос и выбери Matrix,
распивотит безвозмездно т.е. даром :)
самому динамику лепить как раз муторно и лениво
13 май 15, 13:19    [17633721]     Ответить | Цитировать Сообщить модератору
 Re: Групповой запрос sql  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8839
o-o, дык и не надо ничего лепить, всё правильно. Это не серверная задача.
13 май 15, 13:31    [17633855]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить