我有一张大约有 10 行的表。我想将一列中的所有值转换为单行多列结果。看起来好像没有办法绕过“For ContactTypeID in ([1],[2])”语法。
ContactTypeID int
ContactType varchar(20)
Run Code Online (Sandbox Code Playgroud)
样本数据:
1 Customer
2 Vendor
...
5 BillTo
Run Code Online (Sandbox Code Playgroud)
我想返回一行
Customer Vendor BillTo, etc
1 2 5
Run Code Online (Sandbox Code Playgroud)
但就像我说的,我不想用ContactTypeID数字来指定每个。有没有办法指定“对于所有人”?
谢谢。
小智 6
你需要一个动态的支点。
这是代码,供您参考。希望能帮助到你。
CREATE TABLE tablename (ContactTypeID int, ContactType varchar(20));
INSERT INTO tablename VALUES (1, 'Customer'), (2, 'Vendor'), (5, 'BillTo');
DECLARE @cols NVARCHAR (MAX);
SELECT @cols = COALESCE (@cols + ',[' + ContactType + ']',
'[' + ContactType + ']')
FROM (SELECT DISTINCT [ContactType] FROM tablename) PV
ORDER BY [ContactType]
DECLARE @query NVARCHAR(MAX)
SET @query = '
SELECT * FROM
(
SELECT * FROM tablename
) x
PIVOT
(
MIN(ContactTypeID)
FOR [ContactType] IN (' + @cols + ')
) p
'
EXEC SP_EXECUTESQL @query;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8426 次 |
| 最近记录: |