t-sql 对所有值进行透视

Fir*_*yte 6 t-sql sql-server

我有一张大约有 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)