我正在尝试透视表作为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,则会引发错误。
是否在“数据透视表”栏中都需要所有值?如果是这样,您可以选择带有别名的电话号码本身。例如
SELECT Value As PhoneNumber
FROM (either @UDT or #temp)
WHERE DatabaseFieldName = 'PhoneNumber'