Его не очень понятный ожидаемый результат с вашего вопроса. Но так как ты просил
Я хочу, чтобы отобразить сайт в качестве колонки и Q1 до Q7 в виде ряда
вам нужно принести столбцы как строки и преобразовать строку в столбцы. Для этого вам нужно сначала unpivot
, а затем развернуться дальше.
Примечание: Имя столбца таблицы и таблицы образцов может отличаться. Но следуйте подходу, который я использовал.
ОБРАЗЦА ТАБЛИЦА
CREATE TABLE #TEMP([SITE] VARCHAR(10),Q1 INT,Q2 INT,Q3 INT,Q4 INT,Q5 INT,Q6 INT,Q7 INT)
INSERT INTO #TEMP
SELECT 'A',1,3 ,4,2,7,8,9
UNION ALL
SELECT 'B',2,6 ,9,4,8,11,12
UNION ALL
SELECT 'C',10,3 ,2,5,6,4,9
QUERY
Вы можете использовать CROSS APPLY
в unpivot
столбцы в строки.
(a) Когда значения в строках известны заранее, вы можете использовать статический стержень.
SELECT * FROM
(
SELECT [SITE],VAL,COLNAME
FROM #TEMP
CROSS APPLY(VALUES (Q1,'Q1'),(Q2,'Q2'),(Q3,'Q3'),(Q4,'Q4'),(Q5,'Q5'),(Q6,'Q6'),(Q7,'Q7'))
COLUMNNAMES(VAL,COLNAME)
)R
PIVOT
(
MIN(VAL)
for [SITE] in ([A],[B],[C])
)AS P
- Click here для просмотра результата
(б) Когда значения в строке в заранее неизвестно, можно использовать динамический стержень.
-- Get the values in the row and store in a variable
DECLARE @cols NVARCHAR (MAX)
SELECT @cols = COALESCE (@cols + ',[' + [SITE] + ']', '[' + [SITE] + ']')
FROM (SELECT DISTINCT [SITE] FROM #TEMP) PV
ORDER BY [SITE]
-- Convert the values to dynamic number of columns
DECLARE @query NVARCHAR(MAX)
SET @query = 'SELECT * FROM
(
SELECT [SITE],VAL,COLNAME
FROM #TEMP
CROSS APPLY(VALUES (Q1,''Q1''),(Q2,''Q2''),(Q3,''Q3''),
(Q4,''Q4''),(Q5,''Q5''),(Q6,''Q6''),(Q7,''Q7''))
COLUMNNAMES(VAL,COLNAME)
) x
PIVOT
(
MIN(VAL)
FOR [SITE] in (' + @cols + ')
) p
ORDER BY COLNAME;'
EXEC SP_EXECUTESQL @query
Некоторых выборочных данных, желаемый результата и ваши попытки до сих пор было бы хорошо !! –
Просьба предоставить код для того, что вы пытались решить до сих пор. Сейчас это происходит, потому что вы просто хотите, чтобы кто-то написал код для вас, даже не пытаясь сделать это самостоятельно. – MattD
выберите * в #a из (выберите s.Site, s.Q1, s.Q2, s.Q3, s.Q4 s.Q5, s.Q6, s.Q7 из tbl s) как x PIVOT (count (surveyid) для [monthday] в [[1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11] , [12], [13], [14], [15], [16], [17], [18], [19], [20], [21], [22], [23], [ 24], [25], [26], [27], [28], [29], [30], [31])) - я хочу заменить дни сайта. – Arsee