2016-10-13 2 views
1

Итак, я работаю над тем, чтобы сообщить некоторые данные из таблицы, которая отслеживает реакцию пациентов на вопросы о боли в груди, когда они посещают отделение неотложной помощи. Когда пациенты прибывают в ER, им задают ряд вопросов, касающихся их боли в груди. По каждому вопросу их просят оценить боль от 1 до 10. Ниже приведены данные, поскольку они хранятся в таблице.Имена столбцов префикса при использовании динамического Pivot

+-----------+------------+----------+ 
| PatientId | QuestionId | PainRank | 
+-----------+------------+----------+ 
|  1  |  1  |  5 | 
+-----------+------------+----------+ 
|  1  |  2  |  6 | 
+-----------+------------+----------+ 
|  1  |  3  |  4 | 
+-----------+------------+----------+ 
|  2  |  1  |  1 | 
+-----------+------------+----------+ 
|  2  |  2  |  8 | 
+-----------+------------+----------+ 
|  2  |  3  |  2 | 
+-----------+------------+----------+ 
|  3  |  1  |  5 | 
+-----------+------------+----------+ 
|  3  |  2  |  4 | 
+-----------+------------+----------+ 
|  3  |  3  |  7 | 
+-----------+------------+----------+ 

Я создал динамический Pivot данных, которые изменяют вопросы столбцов, как, например, так, чтобы врачи могли смотреть на резюме группы а пациенты.

+-----------+---+---+---+ 
| PatientId | 1 | 2 | 3 | 
+-----------+---+---+---+ 
|  1  | 5 | 6 | 4 | 
+-----------+---+---+---+ 
|  2  | 1 | 8 | 2 | 
+-----------+---+---+---+ 
|  3  | 5 | 4 | 7 | 
+-----------+---+---+---+ 

То, что я хотел бы сделать, это префикс номера вопрос со словом «Вопрос», так что столбцы будут выглядеть так: «Вопрос - 1», «Вопрос - 2», «Вопрос - 3». Я хотел бы добавить префикс, используя SQL-запрос, который создал динамический стержень, но поскольку Pivot является динамическим и не уверен, как его добавить.

Вот SQL, который я использовал для получения динамического Pivot.

-- Dynamic Pivot 
DECLARE @PivotQuery AS NVARCHAR(MAX) 
DECLARE @ColumnNameCollection AS NVARCHAR(MAX) 

-- Get column list. A DISTINCT list of questions 
SELECT @ColumnNameCollection= ISNULL(@ColumnNameCollection + ',','') 
     + QUOTENAME(QuestionId) 
FROM (SELECT DISTINCT QuestionId FROM PatientChestPain) AS Questions 

-- Build PIVOT query using the list of questions 
SET @PivotQuery = 
    N'SELECT PatientId, ' + @ColumnNameCollection + ' 
    FROM PatientChestPain 
    PIVOT(MAX(PainRank) 
      FOR QuestionId IN (' + @ColumnNameCollection + ')) AS PivotTableResult' 
--Execute the PIVOT query 
EXEC sp_executesql @PivotQuery 

Я понимаю, что я мог бы просто изменить окончательный отчет и добавить «Вопрос -», однако я пытаюсь автоматически генерировать отчет, и я могу только манипулировать SQL.

ПРИМЕЧАНИЕ: Я использовал following website для генерации таблиц ascii. Очень приятный интерфейс и прост в использовании. Я попытался создать SQL Fiddle, но похоже, что он не работает с SQL Server на данный момент.

+1

FYI. Я использую SqlFiddle для создания операторов DDL и использую rextester, com, чтобы создать скрипку. –

ответ

3

Я нашел простой способ. Просто создать строку заголовка, в котором вы создаете псевдоним для каждого столбца

DEMO

-- Dynamic Pivot 
DECLARE @PivotQuery AS NVARCHAR(MAX) 
DECLARE @ColumnNameCollection AS NVARCHAR(MAX) 
DECLARE @HeaderNameCollection AS NVARCHAR(MAX) 

-- Get column list. A DISTINCT list of Questions 
SELECT @ColumnNameCollection= ISNULL(@ColumnNameCollection + ',','') 
     + QUOTENAME(QuestionId) 
FROM (SELECT DISTINCT QuestionId FROM PatientChestPain) AS Questions 

-- Get header list. A DISTINCT list of Questions 
SELECT @HeaderNameCollection= ISNULL(@HeaderNameCollection + ',','') 
     + QUOTENAME(QuestionId) + ' as Q' + CAST(QuestionId AS VARCHAR(16)) 
FROM (SELECT DISTINCT QuestionId FROM PatientChestPain) AS Questions 

SELECT @ColumnNameCollection; 
SELECT @HeaderNameCollection; 

-- Build PIVOT query using the list of Questions 
SET @PivotQuery = 
    N'SELECT PatientId, ' + @HeaderNameCollection + ' 
    FROM PatientChestPain 
    PIVOT(MAX(PainRank) 
      FOR QuestionId IN (' + @ColumnNameCollection + ')) AS PivotTableResult' 
--Execute the PIVOT query 

SELECT @PivotQuery; 
EXEC sp_executesql @PivotQuery 

OUTPUT

enter image description here

+0

Если я понимаю все, что вы просто добавляете «Вопрос -» к двум указанным строкам. Я получаю сообщение об ошибке «Некорректный синтаксис рядом с вопросом». – webworm

+0

Проверьте мои изменения, включите демонстрацию –

+0

Фантастический ответ. Это не только работает, но и хорошо описано. Благодарю. – webworm

Смежные вопросы