t-sql对所有值进行透视

时间:2018-02-22 18:31:02

标签: sql-server tsql

我有一个大约10行的表。我想将一列中的所有值转换为一行多列结果。看起来似乎没有办法绕过“([1],[2])”语法中的“For ContactTypeID”。

ContactTypeID int
ContactType varchar(20)

示例数据:

1    Customer
2    Vendor
...
5    BillTo

我想用

返回一行
Customer  Vendor   BillTo, etc
   1        2         5

但就像我说的那样,我不想按编号指定每个ContactTypeID。有没有办法指定“为所有人”?

谢谢。

2 个答案:

答案 0 :(得分:0)

你需要一个动态的支点。 这是代码,供您参考。希望能帮助到你。 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              枢              (                  MIN(ContactTypeID)                  FOR [ContactType] IN(' + @cols +')             )p             ' EXEC SP_EXECUTESQL @query;

答案 1 :(得分:0)

遇到此问题时,我还使用了动态SQL。由于Pedro回答了最初的问题(非空洞的),因此接受他的回答是公平合理的。