【发布时间】:2015-02-04 09:02:10
【问题描述】:
我有 2 张桌子 FormFields 和 Values。我需要从FormFields 表中选择行并设置为列名。 After 它应该用来自Values 表的值填充这些列。 Values 有 GroupId 每个组应该在新行中(GroupId = 1 应该填充第一行,GroupId = 2 应该填充第二行等等)
FormFields 表:
Id GroupId Name
1 1 Examp11
2 1 Examp12
3 1 Examp13
4 1 Examp14
5 1 Examp15
6 1 Examp16
7 2 Examp17 -- End of the group 1
8 2 Examp11 -- From here should start second row (after pivot)
9 2 Examp12
10 2 Examp13
11 2 Examp14
12 2 Examp15
13 2 Examp16
14 2 Examp17 -- End of the group 2
值表:
Id GroupId FormFieldId Value
18 1 1 val1
19 1 2 val2
20 1 3 val3
21 1 4 val4
22 1 5 val5
23 1 6 val6
24 1 7 val7
25 2 1 val8 -- From here start duplicating FormFieldId, changed GroupId to 2
26 2 2 val9
27 2 3 val10
28 2 4 val11
29 2 5 val12
30 2 6 val13
31 2 7 val14
它应该被选择为(按 GroupId,其中GroupId = 1 值应位于第一行,GroupId = 2 值应位于第二行等)。在这个例子中,我只展示了 14 个值,但我有 28 个值(4 组)可供选择:
Examp11 Examp12 Examp13 Examp14 Examp15 Examp16 Examp17
val1 val2 val3 val4 val5 val6 val7 -- GroupId = 1
val8 val9 val10 val11 val12 val13 val4 -- GroupId = 2
我知道我需要使用PIVOT,但无法成功。
我试过了,但它会抛出错误
DECLARE @cols AS NVARCHAR(MAX)
SET @cols = 'SELECT [Name] FROM FormFields WHERE ID BETWEEN 1 AND 6'
SELECT * FROM
(
SELECT Name
FROM FormFields
) x
PIVOT
(
MIN (Name)
FOR Name IN (' + @cols + ')
) p
【问题讨论】:
标签: mysql sql sql-server pivot multiple-columns