Member 8478234 Ответов: 3

Как разложить столбцы в строки в SQL


У меня есть такие столы

Table1

Cid	FlagId	AdjusterId
1	1	1
2	2	2
3	1	1
4	3	2
5	4	1
6	2	1

Table2

FlagId	FlagName
1	F1        
2	F2        
3	F3        
4	F4       

Table3

AId	AName
1	ABC       
2	XYZ


Мне нужен вывод, как показано ниже

AName	F1	F2   F3   F4
ABC	2	1    0    1
XYZ	0	1    1    0


Что я уже пробовал:

Достижимо ли это с помощью pivot.

WITH PIVOTED
AS (
	SELECT *
	FROM Claim c
	inner join Flag f on f.flagId = c.FlagId
		PIVOT(Sum(f.FlagId)  
			FOR f.FlagName IN([F1], [F2],[F3],[F4]) 
		) P
)
SELECT 
	*
FROM PIVOTED


Я не получаю результата как ожидалось

3 Ответов

Рейтинг:
2

Tisham Ahuja

Я не использовал PIVOT, однако это можно сделать с помощью производной, временной таблицы или табличной переменной и т. д.. Ниже приводится использование производной таблицы:

SELECT AId, SUM(Derived.F1) AS F1,SUM(Derived.F2) AS F2,SUM(Derived.F3) AS F3 ,SUM(Derived.F4) AS F4 FROM 
(
SELECT T3.AID,
CASE FName WHEN 'F1' THEN COUNT(1)  ELSE 0 END AS F1,
CASE FName WHEN 'F2' THEN COUNT(1)  ELSE 0 END AS F2,
CASE FName WHEN 'F3' THEN COUNT(1)  ELSE 0 END AS F3,
CASE FName WHEN 'F4' THEN COUNT(1)  ELSE 0 END AS F4
 FROM TABLE2 T2 INNER JOIN TABLE1 T1 ON T2.FId = T1.FId INNER JOIN TABLE3 T3 ON T1.AId = T3.AId
GROUP BY T3.AID, FName
) Derived GROUP BY AID


Надеюсь, это поможет.. Кроме кодирования :)


Рейтинг:
2

Member 13737936

как мне создать список посещаемости ученика в SQL из посещаемости дают выиграть студента коснуться отпечатка пальца ;


Maciej Los

Это не ответ. Пожалуйста, удалите его. Если вы хотите задать вопрос, пожалуйста СПРАШИВАТЬ

Рейтинг:
0

Maciej Los

Проверить это:

SELECT AName, [F1], [F2], [F3], [F4]
FROM (
	SELECT t2.FlagName, t3.AName 
	FROM @Table1 AS t1
		INNER JOIN @Table2 AS t2 ON t1.FlagId = t2.FlagId  
		INNER JOIN @Table3 AS t3 ON t1.AdjusterId = t3.AId 
	) AS DT 
PIVOT(COUNT(FlagName) FOR FlagName IN ([F1], [F2], [F3], [F4])) AS PVT

Результат:
AName   F1      F2      F3     F4
ABC     2	    1	    0	    1
XYZ	    0	    1	    1	    0


Примечание: Заменить @Table1, @Table2, @Table3 с правильным именем таблицы.


Для получения более подробной информации, пожалуйста, смотрите:
Использование PIVOT и UNPIVOT | Microsoft Docs[^]
Визуальное представление SQL-соединений[^]


Animesh Datta

Мой 5-Й!

Maciej Los

Спасибо