У меня есть таблица с этой схемой:Использования UNPIVOT с динамическим SQL
tblResults
Question1 | Question2 | Question3 | etc | etc | Question240 |
В этих значениях столбцов может быть представлена следующим образом:
1, 2, 3, 4, N, M
Мне нужно представляет данные, подобные этому:
| QuestionNumber | 1 | 2 | 3 | 4 | N | M |
------------------------------------------
| Question1 | 53| 27| 10| 5 | 2 | 3 |
| etc | 20| 40| 32| 8 | 0 | 0 | <-- These values being % (but I can do the calculation later).
| etc |
Мне нужно уметь контролировать количество строк, которые будет выводить результирующий набор. Я сделал это, выполнив следующие (3 колонки только):
DECLARE @cname VARCHAR(MAX)
SELECT @cname = STUFF((
SELECT ', ' + COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE (TABLE_NAME = 'tblResults') AND (ORDINAL_POSITION BETWEEN 8 AND 10)
FOR XML PATH(''), TYPE).value('.', 'varchar(max)'), 1,1,'')
DECLARE @sql NVARCHAR(MAX)
SET @sql = 'SELECT Answers, CASE WHEN Answer = '''' THEN ''N'' ELSE Answer END AS Answer, COUNT(Answer) AS Total
FROM (
SELECT '[email protected]+'
FROM tblResults
WHERE (something = ''006'') AND (somethingElse = ''ABC'')
) AS MyTable
UNPIVOT (Answer FOR Answers IN ('[email protected]+')) AS MyUnPivot
GROUP BY Answers, Answer
ORDER BY Answers, Answer'
exec sp_executesql @sql
Это приводит следующий результирующий набор:
| Answers | Answer | Total |
----------------------------
|Question1| 1 | 12474 |
|Question1| 2 | 188 |
|Question1| 3 | 200 |
|Question1| 4 | 5 |
|Question1| N | 0 |
|Question1| M | 142 |
|Question2| 1 | 14521 |
|etc | | |
|etc | | |
Поэтому мой план состоял в том, чтобы использовать динамический SQL, как я не могу думать о любой другой способ сделать это. Я пробовал различные методы UNPIVOT, но я не могу добиться какого-либо прогресса.
Beofre, кто-нибудь предлагает, какой ужасный дизайн это, я знаю, это то, что я унаследовал, и его нельзя изменить, не переписывая стороннее приложение.
Если кто-нибудь может подумать о лучшем названии, отредактируйте его.
Спасибо.
Можете ли вы разместить дополнительные данные образца? Что становится заголовками новых столбцов и каковы значения под каждым заголовком? – Taryn
@bluefeet Я добавил то, что у меня до сих пор, 'COUNT' правильные, но мне нужно получить значения' Ответ' в виде столбцов. –
Основываясь на наборе результатов, который производит ваш текущий запрос, каков вам конечный результат? – Taryn