SQL - поворот по значениям столбцов и строк

Я пытаюсь повернуть таблицу по позициям X и Y. Таблица имеет формат, аналогичный приведенному ниже.

Каждая строка имеет значение, соответствующее ее положению строки и столбца. «AThing» и «FileName» следует игнорировать в наборе данных.

SQL - поворот по значениям столбцов и строк

Итак, если бы это было развернуто, мы бы получили:

SQL - поворот по значениям столбцов и строк

Я пытался какое-то время, но не могу понять это, есть идеи?

Обновлено: количество полей является динамическим для «FileName». Мне удалось извлечь имена столбцов, но не данные, используя:

-- Construct List of Columns to Pivot
SELECT @PivotCols = 
STUFF(
    (SELECT ',' + QUOTENAME(FieldName) 
     FROM #Data
     GROUP BY ColPos, FieldName
     ORDER BY ColPos ASC
     FOR XML PATH(''),TYPE).value('.', 'NVARCHAR(MAX)') 
,1,1,'')

SET @PivotQuery =
SELECT ' + @PivotCols + N' 
FROM 
(
    SELECT ColPos, FieldName
    FROM #Data
    GROUP BY ColPos, FieldName
) x
PIVOT 
(
    MIN(ColPos)
    FOR FieldName IN (' + @PivotCols + N')
) p' 

EXEC sp_executesql @PivotQuery
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
66
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Пожалуйста, попробуйте этот код:

 DECLARE @columns NVARCHAR(MAX), @sql NVARCHAR(MAX);
SET @columns = N'';
SELECT @columns += N', p.' + QUOTENAME(FieldName)
  FROM (SELECT distinct p.FieldName FROM Tablename AS p
  ) AS x;
SET @sql = N'
SELECT ' + STUFF(@columns, 1, 2, '') + '
FROM
(
  SELECT p.Value, p.FieldName, p.RowPos
   FROM Tablename AS p
) AS j
PIVOT
(
  MAX(Value) FOR FieldName IN ('
  + STUFF(REPLACE(@columns, ', p.[', ',['), 1, 1, '')
  + ')
) AS p;';
PRINT @sql;
EXEC sp_executesql @sql;

Количество столбцов будет варьироваться в зависимости от того, к какому «файлу» принадлежат данные. С помощью PIVOT мне удалось извлечь имена столбцов, но не данные

Jamie Stuart Robin Parsons 27.04.2018 20:56

Хорошо. Я обновлю свой вопрос для имен динамических полей.

Aura 27.04.2018 20:57

Спасибо за код, просто попробовал, и столбцы кажутся правильными, однако я получаю только одну строку с неправильными значениями (FieldA = 700, FieldB = 800, FieldC = 900)

Jamie Stuart Robin Parsons 27.04.2018 21:14

Можете ли вы попробовать другую агрегатную функцию, например min или count.

Aura 27.04.2018 21:17

Использование MIN дает 100,200,300 в правильном порядке, но по-прежнему возвращает только одну строку данных.

Jamie Stuart Robin Parsons 27.04.2018 21:24

@JamieStuartRobinParsons, проверьте обновленный ответ. RowPos должен быть указан в операторе выбора

uzi 28.04.2018 05:24

Теперь работает отлично, ответ отмечен как правильный. Спасибо за помощь.

Jamie Stuart Robin Parsons 30.04.2018 08:30

Другие вопросы по теме