2017-01-31 1 views
0

В настоящее время я пречисление группы данных с отдельными «UNION» ред выберите заявления, которое создает новую запись строки для каждой части информации:Выбор SQL Server союза с различными «где» статьями в одной строке

Пример:

(No column name) 
1 40 
2 11 
3 13 
4 29 
5 64 
6 34 

Что я хочу - это изменить это на строку с помеченными столбцами.

Пример:

Column 1 Column 2 Column 3 Column 4 Column 5 Column 6 
1 40   11   13   29   64   34 

Как бы я идти о том, что делать?

+3

Сводная таблица https://blogs.msdn.microsoft.com/spike/2009/03/03/pivot-tables-in-sql-server-a-simple-sample/ – Snowlockk

+0

У меня нет сомнений, что ссылка верна, но Мне тяжело следовать примеру, указанному в этой ссылке, и применить его к моей ситуации. – obizues

+0

Взгляните на ответ и просто измените имена агрегатов и столбцов на то, что вам нужно. – Snowlockk

ответ

4
DECLARE @T TABLE (Val INT, SortOrder VARCHAR(20)) 
INSERT INTO @T 
SELECT 40,'Column 1' 
UNION 
SELECT 11,'Column 2' 
UNION 
SELECT 13,'Column 3' 
UNION 
SELECT 29,'Column 4' 
UNION 
SELECT 64,'Column 5' 
UNION 
SELECT 34,'Column 6' 

SELECT * FROM @T 
pivot (avg (Val) for SortOrder in (
[Column 1],[Column 2],[Column 3],[Column 4],[Column 5],[Column 6]) 
) as Whatever 

rextester: http://rextester.com/LWZH64528

результаты:

+----------+----------+----------+----------+----------+----------+ 
| Column 1 | Column 2 | Column 3 | Column 4 | Column 5 | Column 6 | 
+----------+----------+----------+----------+----------+----------+ 
|  40 |  11 |  13 |  29 |  64 |  34 | 
+----------+----------+----------+----------+----------+----------+ 

Дата в качестве значения первого столбца

DECLARE @T TABLE (Val VARCHAR(20), SortOrder VARCHAR(20)) 
INSERT INTO @T 
SELECT '2016-10-12','Column 1' 
UNION 
SELECT '11','Column 2' 
UNION 
SELECT '13','Column 3' 
UNION 
SELECT '29','Column 4' 
UNION 
SELECT '64','Column 5' 
UNION 
SELECT '34','Column 6' 

SELECT * FROM @T 
pivot (MAX(Val) for SortOrder in ([Column 1],[Column 2],[Column 3],[Column 4],[Column 5],[Column 6])) as Whatever 

Результат:

+----------+----------+----------+----------+----------+----------+ 
| Column 1 | Column 2 | Column 3 | Column 4 | Column 5 | Column 6 | 
+----------+----------+----------+----------+----------+----------+ 
|2016-10-12|  11 |  13 |  29 |  64 |  34 | 
+----------+----------+----------+----------+----------+----------+ 
+0

Большое спасибо, это прекрасно работает. Следующее, что мне нужно, это одно из значений, которое должно быть датой, и когда я поворачиваю для даты, которая будет тем, что указано в первом столбце. Любые данные о том, как это сделать? – obizues

+1

@obizues Вы хотите, чтобы значение столбца 1 было датой или именем столбца, которое должно быть датой ?. Проверьте, действительно ли мое редактирование. – Snowlockk

+0

Да, я понял, у меня был мозговой штурм. По сути, каждый выбор я просто должен был добавить метод getDate и объявить это в начальной таблице. Затем я просто оставил это из сводной инструкции, так как он не является частью того, что поворачивается или продолжается. Еще раз спасибо! – obizues