【发布时间】:2019-10-01 12:18:37
【问题描述】:
我正在尝试透视作为 UDT 传入的表。第 1 列将具有重复值,第 2 列将具有不同的值(示例如下)。我希望将列名设置为电话号码和电话号码列下的两个值。
DECLARE @query AS NVARCHAR(MAX) = '';
--Temp Table to act as UDT for ease of testing
DECLARE @udt TABLE (DatabaseFieldName nvarchar(50), Value nvarchar(50))
INSERT INTO @udt VALUES('PhoneNumber','01234567890')
INSERT INTO @udt VALUES('PhoneNumber','09876543210')
--Preview of table before Pivot
select * from @udt
CREATE TABLE #temp
(
DatabaseFieldName nvarchar(50),
Value nvarchar(50)
)
INSERT INTO #temp
SELECT DatabaseFieldName, Value
FROM @udt
SELECT @cols = @cols + QUOTENAME(DatabaseFieldName) + ',' FROM (select distinct DatabaseFieldName from #temp) as temp
SELECT @cols = substring(@cols, 0, len(@cols)) -- Trims ',' at the end
SET @query =
'
SELECT * FROM
(
SELECT DatabaseFieldName, Value
FROM #temp
) AS SRC
PIVOT
(
MIN(Value) for DatabaseFieldName in (' + @cols + ')
) AS PivotTable';
execute(@query)
DROP TABLE #temp
当前和期望结果的示例
Data as it comes in:
DatabaseFieldName | Value
--------------------------------
PhoneNumber | 01234567890
PhoneNumber | 09876543210
Outcome I am hoping to get:
PhoneNumber
------------
01234567890
09876543210
What I am currently getting:
PhoneNumber
------------
01234567890
由于在select语句中使用了distinct,目前第二个数字被忽略了,但是如果不使用distinct,则会引发错误。
【问题讨论】:
标签: sql-server stored-procedures pivot dynamic-sql