如何动态地在SQL Server中使用连接来旋转表

时间:2018-05-24 12:50:55

标签: sql sql-server

我有两个表,KeyIndexes和IndexTypes。

enter image description here

enter image description here

对于第一个表中存在的所有ImageFileID,我希望结果为单行,如下所示 -

enter image description here

以上是http://sqlfiddle.com/#!18/1c9a2/2/0

的SQL小提琴

如何使用PIVOT或SQL Server中的任何内容完成它?

2 个答案:

答案 0 :(得分:1)

你可以在没有PIVOT的情况下做到这一点。

SELECT
    ImageFileID,
    PolicyNumber = MAX(CASE WHEN IndexTypeID=1 THEN KeyIndexValue ELSE NULL END)
    ...
FROM
    KeyIndexes
GROUP BY
    ImageFileID

答案 1 :(得分:0)

多次尝试后,我创建了以下动态数据透视查询,该查询对上述问题工作正常:

CREATE PROC [dbo].[pGetQAReleaseRejectRec]
@ImageFileID as int=null
AS
BEGIN
DECLARE @cols AS NVARCHAR(MAX),
@query  AS NVARCHAR(MAX)    

SELECT @cols = STUFF((SELECT  ',' + QUOTENAME([FieldName]) 
                    FROM KeyIndexes k join 
IndexTypes i on k.IndexTypeID=i.IndexTypeID
where ImageFileID=@ImageFileID
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

select @query='
select * from
(
  select ImageFileID,k.KeyIndexValue,i.FieldName from KeyIndexes k join 
IndexTypes i on k.IndexTypeID=i.IndexTypeID 
where ImageFileID= '+CONVERT(varchar, @ImageFileID)+'
) s
PIVOT
(
    max(KeyIndexValue)
    FOR [FieldName] IN (' + @cols + ')
)AS pvt'

EXEC SP_EXECUTESQL @query
END