Sql server 动态列-SQL Server 2012
有两个表,我想将一些行转换为列。我的数据库引擎是Microsoft SQL Server。下图显示了我想要的结果Sql server 动态列-SQL Server 2012,sql-server,pivot,Sql Server,Pivot,有两个表,我想将一些行转换为列。我的数据库引擎是Microsoft SQL Server。下图显示了我想要的结果 你的问题不太清楚,但似乎你想用 样本数据 DECLARE @tblModule TABLE(modId INT,name VARCHAR(200)) DECLARE @tblProfile TABLE(id INT,modId INT,profil VARCHAR(200)) INSERT INTO @tblModule SELECT 1,'Manteniminento' UNIO
你的问题不太清楚,但似乎你想用 样本数据
DECLARE @tblModule TABLE(modId INT,name VARCHAR(200))
DECLARE @tblProfile TABLE(id INT,modId INT,profil VARCHAR(200))
INSERT INTO @tblModule
SELECT 1,'Manteniminento' UNION
SELECT 2 , 'Soporte'
INSERT INTO @tblProfile
SELECT 1,1,'Administrador' UNION
SELECT 2,2 , 'Empleado' UNION
SELECT 3,1 , 'Empleado' UNION
SELECT 4,1 , 'Empleado' UNION
SELECT 5,1 , 'Administrador' UNION
SELECT 6,1 , 'Administrador'
主查询
SELECT name,SUM([Administrador]) AS Administrador, SUM([Empleado]) AS Empleado
FROM
(SELECT id,p.modId,m.name,p.profil
FROM @tblProfile p
INNER JOIN @tblModule m ON m.modId = p.modId) AS SourceTable
PIVOT
(
COUNT(modId)
FOR profil IN ([Administrador], [Empleado])
) AS PivotTable
GROUP BY name
结果
name Administrador Empleado
Manteniminento 3 2
Soporte 0 1
我找到了我需要的解决办法。我与大家分享我使用SQL的情况:
SELECT A.codEmpresa
,A.nomEmpresa
,A.codSistema
,A.nomSistema
,A.codPerfil
,A.nomPerfil
,modulos = STUFF((SELECT DISTINCT ', ' + M.nomModulo
FROM smpseg.[0004] R
JOIN smpseg.[0014] SMOP
ON SMOP.codSistema = R.codSistema
AND SMOP.codModulo = R.codModulo
AND SMOP.codPerfil = A.codPerfil
AND SMOP.objDefault = CAST(1 AS BIT)
JOIN smpseg.[0011] O
ON O.codSistema = SMOP.codSistema
AND O.codModulo = SMOP.codModulo
AND O.codObjeto = SMOP.codObjeto
JOIN smpseg.[0010] M
ON M.codSistema = O.codSistema
AND M.codModulo = O.codModulo
WHERE R.codUsuario = @p_codUsuario
FOR XML PATH('')), 1, 2, '') FROM smpseg.[0004] A
JOIN smpseg.[0016] U
ON U.codUsuario = A.codUsuario
这里有很多关于动态枢轴的问题。你看过其中任何一个吗?尝试过任何技术吗?如果是这样的话,请链接到您已经看过的,然后是您尝试使用它们以及什么不起作用。这不是一个“这是一个规范,请为我写代码”服务。搜索
动态透视@configbug仅供参考有一个西班牙语版本的stackoverflow,您可能想在那里提问。