Сводные столбцы в ms SQL
Мне нужно использовать pivot для создания таблицы времени из следующих данных:
а записи содержат внутреннее соединение.Я пробовал и предоставлял код, но не смог его получить
Я надеюсь, что это достаточные данные
starttime endtime subjname dd 9 11 History Monday 11 13 Physics Tuesday
Я использую этот запрос, чтобы создать столбцы
select start_time, end_time, s.subj_name, tt.dd from time_table tt inner join subj s on tt.subjid = s.subjid
Я могу повернуть свой результат, используя приведенный ниже код
--Declare necessary variables DECLARE @SQLQuery AS NVARCHAR(MAX) DECLARE @PivotColumns AS NVARCHAR(MAX) --Get unique values of pivot column SELECT @PivotColumns = COALESCE(@PivotColumns + ',','') + QUOTENAME(dd) FROM (SELECT DISTINCT(dd) FROM time_table tt WHERE divid = 1 AND tt.active = 1) AS PivotExample SELECT @PivotColumns --Create the dynamic query with all the values for --pivot column at runtime SET @SQLQuery = N'SELECT start_time,end_time, ' + @PivotColumns + ' FROM [dbo].[time_table] PIVOT( SUM(subjid) FOR dd IN (' + @PivotColumns + ')) AS P' SELECT @SQLQuery --Execute dynamic query EXEC sp_executesql @SQLQuery
И получение вывода в виде
Starttime endtime Monday Tuesday Wednesday 9 11 7 8 null 11 13 null 7 9
Здесь я получаю subjectid и, но я хочу, чтобы имя субъекта было другим,как показано в приведенном выше запросе, помогите мне с этой проблемой.Я попытался дать функцию max() agreegate, так как это varchar, но я думаю, что получаю ошибку из-за соединения
Спасибо.
RedDk
Слово "PIVOT" - это действительно неприятное слово пользователя базы данных для более приятного слова, используемого математиками (линейная алгебра) и тому подобное,"транспонировать". Посмотрите на транспонирование usg Google с помощью "MS SQL "и"How to". Место для начала ... экспериментирующий.