我有一个大约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回答了最初的问题(非空洞的),因此接受他的回答是公平合理的。