Sql server t-sql以所有值为轴心

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 但正如我所说,我不想按编号指定每个

我有一张大约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
。有没有办法指定“为所有人”


谢谢。

您需要一个动态枢轴

这是代码,供您参考。希望能有帮助

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。有没有一种不用它的方法呢?因为你的列取决于你拥有的数据,我不知道有什么不同的解决方案。不过,我会记住这个问题,如果我有不同的方法,我会回来找你。干杯