Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Создание таблицы с объединенными столбцами  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: Создание таблицы с объединенными столбцами  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: Создание таблицы с объединенными столбцами  [new]
ush-er
Member

Откуда:
Сообщений: 4
Тип данных int и date соответственно. Не очень понял, каким образом я его выкручиваю в строку. Я только объявляю название для столбца ведь.
Попробовал, пишет ошибку. Сообщение 207, уровень 16, состояние 1, строка 2
Недопустимое имя столбца "otv.ответ".
10 ноя 12, 13:29    [13451298]     Ответить | Цитировать Сообщить модератору
 Re: Создание таблицы с объединенными столбцами  [new]
ush-er
Member

Откуда:
Сообщений: 4
ugr.номер тоже int
10 ноя 12, 13:30    [13451300]     Ответить | Цитировать Сообщить модератору
 Re: Создание таблицы с объединенными столбцами  [new]
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 Ответить