Sql server t-sql以所有值为轴心
我有一张大约10排的桌子。我希望将一列中的所有值转换为一行多列结果。看起来似乎没有办法绕过“For ContactTypeID in([1],[2])语法Sql server t-sql以所有值为轴心,sql-server,tsql,Sql Server,Tsql,我有一张大约10排的桌子。我希望将一列中的所有值转换为一行多列结果。看起来似乎没有办法绕过“For ContactTypeID in([1],[2])语法 ContactTypeID int ContactType varchar(20) 样本数据: 1 Customer 2 Vendor ... 5 BillTo 我想返回带有 Customer Vendor BillTo, etc 1 2 5 但正如我所说,我不想按编号指定每个
ContactTypeID int
ContactType varchar(20)
样本数据:
1 Customer
2 Vendor
...
5 BillTo
我想返回带有
Customer Vendor BillTo, etc
1 2 5
但正如我所说,我不想按编号指定每个ContactTypeID
。有没有办法指定“为所有人”
谢谢。您需要一个动态枢轴 这是代码,供您参考。希望能有帮助
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;
当我遇到这个问题时,我还使用了动态SQL。由于佩德罗回答了最初的(未提出警告的)问题,因此接受他的回答是公平和恰当的。谢谢你的回答。我的错误,我应该说没有动态SQL。有没有一种不用它的方法呢?因为你的列取决于你拥有的数据,我不知道有什么不同的解决方案。不过,我会记住这个问题,如果我有不同的方法,我会回来找你。干杯