Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
ush-er Member Откуда: Сообщений: 4 |
Добрые люди, можно сказать, это мой первый опыт работы в SQL. Кому не сложно, помогите разобраться в чем загвоздка. Ниже приведены 2 запроса: 1 - подсчет среднего балла для определенного человека, 2 - объединение столбцов из разных таблиц в один. Отдельно они, вроде, работают, а вот как соединить их в 1 запрос, чтобы итоговая таблица состояла из этих двух столбцов я не понимаю. Буду благодарен за любую помощь или совет. select cast (round(avg ([otv.ответ]/111), 0) as varchar) as [средний балл] from [Ответ] otv inner join [Респондент] as res on otv.[ID респондента]=res.[id респондента] inner join [Учебная группа] as ugr on ugr.[id группы]=res.[id группы] inner join [Учебный поток] as upo on upo.[id потока]=ugr.[id потока] inner join [Поток специальности] as pos on pos.[id потока]=upo.[id потока] inner join [Специальность] as spe on spe.[id специальности]=pos.[id специальности] inner join [Специализация] as spea on spe.[id специальности]=spea.[id специальности] inner join [мнение респондента] as mre on mre.[ID респондента]=res.[id респондента] inner join [Сотрудник подразделения] AS spo on mre.[id сотрудника]=spo.[id сотрудника] inner join [Работник] as rab on rab.[ID работника]=spo.[ID сотрудника] where rab.Фамилия='Васильцова' and rab.Имя='Вероника' and rab.Отчество='Михайловна' group by rab.Фамилия select case isnull(ugr.[Номер], 0) when 0 then cast((spe.[Шифр специальности] + ' – ' + upo.[Год набора]) as varchar) else cast((spe.[Шифр специальности] + ' – ' + upo.[Год набора] + ' – ' + ugr.номер) as varchar) end [Название группы] from [Учебная группа] as ugr inner join [Учебный поток] as upo on upo.[id потока]=ugr.[id потока] inner join [Поток специальности] as pos on pos.[id потока]=upo.[id потока] inner join [Специальность] as spe on spe.[id специальности]=pos.[id специальности] |
10 ноя 12, 11:27 [13451143] Ответить | Цитировать Сообщить модератору |
RubinDm Member Откуда: SPb Сообщений: 458 |
select [средний балл] = cast (round(avg ([otv.ответ]/111), 0) as varchar), [Название группы] = cast((spe.[Шифр специальности] + ' – ' + upo.[Год набора]) as varchar) -- тут неплохо было бы указать размер для varchar + case when isnull(ugr.[Номер], 0) <> 0 then ' - ' + cast(ugr.номер as varchar(10)) else '' end -- в остальном все тож-самое from [Ответ] otv inner join [Респондент] as res on otv.[ID респондента]=res.[id респондента] inner join [Учебная группа] as ugr on ugr.[id группы]=res.[id группы] inner join [Учебный поток] as upo on upo.[id потока]=ugr.[id потока] inner join [Поток специальности] as pos on pos.[id потока]=upo.[id потока] inner join [Специальность] as spe on spe.[id специальности]=pos.[id специальности] inner join [Специализация] as spea on spe.[id специальности]=spea.[id специальности] inner join [мнение респондента] as mre on mre.[ID респондента]=res.[id респондента] inner join [Сотрудник подразделения] AS spo on mre.[id сотрудника]=spo.[id сотрудника] inner join [Работник] as rab on rab.[ID работника]=spo.[ID сотрудника] where rab.Фамилия='Васильцова' and rab.Имя='Вероника' and rab.Отчество='Михайловна' group by rab.Фамилия зы: какой тип данных у колонок spe.[Шифр специальности], upo.[Год набора] и ugr.номер ? ps: зачем Вы [средний бал] на выходе выкручиваете в строку? |
10 ноя 12, 13:18 [13451281] Ответить | Цитировать Сообщить модератору |
ush-er Member Откуда: Сообщений: 4 |
Тип данных int и date соответственно. Не очень понял, каким образом я его выкручиваю в строку. Я только объявляю название для столбца ведь. Попробовал, пишет ошибку. Сообщение 207, уровень 16, состояние 1, строка 2 Недопустимое имя столбца "otv.ответ". |
10 ноя 12, 13:29 [13451298] Ответить | Цитировать Сообщить модератору |
ush-er Member Откуда: Сообщений: 4 |
ugr.номер тоже int |
10 ноя 12, 13:30 [13451300] Ответить | Цитировать Сообщить модератору |
ush-er Member Откуда: Сообщений: 4 |
заработало в таком виде, однако не дает имя столбцу [Название_группы] и при попытке использования group by [Название_группы] выдает ошибку, мол недопустимое имя столбца. select [средний_балл]=cast (round(avg ([ответ]/111), 0) as varchar), (select [Название_группы]= case isnull(ugr1.[Номер], 0) when 0 then cast((spe1.[Шифр специальности] + ' – ' + upo1.[Год набора]) as varchar) else cast((spe1.[Шифр специальности] + ' – ' + upo1.[Год набора] + ' – ' + ugr1.номер) as varchar) end from [Учебная группа] as ugr1 inner join [Учебный поток] as upo1 on upo1.[id потока]=ugr1.[id потока] inner join [Поток специальности] as pos1 on pos1.[id потока]=upo1.[id потока] inner join [Специальность] as spe1 on spe1.[id специальности]=pos1.[id специальности] ) from [ответ] otv inner join [Респондент] as res on otv.[ID респондента]=res.[id респондента] inner join [Учебная группа] as ugr on ugr.[id группы]=res.[id группы] inner join [Учебный поток] as upo on upo.[id потока]=ugr.[id потока] inner join [Поток специальности] as pos on pos.[id потока]=upo.[id потока] inner join [Специальность] as spe on spe.[id специальности]=pos.[id специальности] inner join [Специализация] as spea on spe.[id специальности]=spea.[id специальности] inner join [мнение респондента] as mre on mre.[ID респондента]=res.[id респондента] inner join [Сотрудник подразделения] AS spo on mre.[id сотрудника]=spo.[id сотрудника] inner join [Работник] as rab on rab.[ID работника]=spo.[ID сотрудника] where rab.Фамилия='Васильцова' and rab.Имя='Вероника' and rab.Отчество='Михайловна' |
10 ноя 12, 14:34 [13451390] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |