gpt4 book ai didi

mysql - 枢。使用行作为列名并填充记录

转载 作者:行者123 更新时间:2023-11-29 03:32:36 25 4
gpt4 key购买 nike

我有 2 个表 FormFieldsValues。我需要从 FormFields 表中选择行并设置为列名。之后它应该用 Values 表中的值填充这些列。 ValuesGroupId 每个组都应该在新行中(其中 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

最佳答案

您需要将其设为动态查询才能使用@cols(列)。

我还更改了列列表 @cols 生成

DECLARE @cols AS NVARCHAR(MAX)='',
@sql NVARCHAR(max)

SELECT @cols += Isnull([Name], '') + ','
FROM (SELECT DISTINCT name
FROM FormFields
WHERE ID BETWEEN 1 AND 6)a


SET @cols = LEFT(@cols, Len(@cols) - 1)
SET @sql=' SELECT * FROM
(
SELECT v.GroupId, Name,Value
FROM FormFields F join Values V on F.id= v.FormFieldId
) x PIVOT
(
MIN (Value)
FOR Name IN (' + @cols + ')
) p'

EXEC Sp_executesql @sql

关于mysql - 枢。使用行作为列名并填充记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28317289/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com