我有以下结构:
TABLE: Field
ID | Name
---|--------
1 | Email
2 | City
Run Code Online (Sandbox Code Playgroud)
和
TABLE: Answers
ID | Field | Value | User
-----------------------------------
1 | 1 | m1@mail.com | 3
2 | 2 | abc | 3
3 | 1 | m2@mail.com | 4
4 | 2 | qwe | 4
Run Code Online (Sandbox Code Playgroud)
我想选择:
Email | City
-------------------
m1@mail.com | abc
m2@mail.com | qwe
Run Code Online (Sandbox Code Playgroud)
我该怎么做?
你可以试试这个:
DECLARE @columns NVARCHAR(MAX)
SELECT @columns = COALESCE(@columns + ',[' + cast(f.[Name] as varchar) + ']',
'[' + CAST(f.[Name] as VARCHAR)+ ']')
FROM Answers AS a INNER JOIN Field AS f ON a.[Field] = f.[ID]
GROUP BY f.[Name]
DECLARE @query NVARCHAR(MAX)
SET @query = '
SELECT * FROM
(SELECT f.[Name], a.[Value], a.[User]
FROM Answers AS a INNER JOIN Field AS f ON a.[Field]
= f.[ID]) AS s
PIVOT (MAX(Value) FOR [Name] IN (' + @columns + ')) AS p'
EXECUTE(@query);
Run Code Online (Sandbox Code Playgroud)