我有两个表,KeyIndexes和IndexTypes。
对于第一个表中存在的所有ImageFileID,我希望结果为单行,如下所示 -
以上是http://sqlfiddle.com/#!18/1c9a2/2/0
的SQL小提琴如何使用PIVOT或SQL Server中的任何内容完成它?
答案 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