Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Precisa de ajuda T-SQL para converter linhas de várias tabelas em colunas com valores no Sql Server 2005


Meu primeiro pensamento é melhorar o esquema e você realmente precisa fazer isso.

Para simplificar a questão, parece que você deseja definir o nome da coluna com base em uma junção para mstBCE. Você não precisa de uma relação porque o número de colunas em tblBCE é fixo. Em vez disso, use sql dinâmico para definir os nomes de coluna selecionando de mstBCE dinamizados em uma linha.
DECLARE @sql nvarchar(4000); 
SELECT @sql = N'SELECT u.[username], u.[department], 
b.[Option1TB] as [' + pvt.[1] + N'], b.[Option1], 
b.[Option2TB] as [' + pvt.[2] + N'], b.[Option2], 
b.[Option3TB] as [' + pvt.[3] + N'], b.[Option3] 
FROM tblBCE as b 
JOIN tblUser as u ON b.[UserID] = u.[userid]; ' 
FROM (
    SELECT [tabconfigid], [tabdata] 
    FROM mstBCE 
    WHERE [tabType] = N'BCE'
) as m 
PIVOT ( MIN(m.[tabdata]) FOR m.[tabconfigid] IN ([1], [2], [3]) ) as pvt; 

EXEC (@sql);