Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将行值作为列添加到现有表中_Sql Server_Tsql - Fatal编程技术网

Sql server 将行值作为列添加到现有表中

Sql server 将行值作为列添加到现有表中,sql-server,tsql,Sql Server,Tsql,对我来说,答案似乎就在PIVOT和DynamicSQL中的某个地方,但我无法将它们组合在一起。我有下表 FieldId InternalFieldName FieldLabel 1 RepairableSpare_1 CField0 6 Equipment_6 CField1 7 Equipment_7 CField2 8 Equipment_8 CField3 9 Equipment_9

对我来说,答案似乎就在PIVOT和DynamicSQL中的某个地方,但我无法将它们组合在一起。我有下表

FieldId InternalFieldName  FieldLabel
1       RepairableSpare_1  CField0
6       Equipment_6        CField1
7       Equipment_7        CField2
8       Equipment_8        CField3
9       Equipment_9        CField4
我需要将这些值添加到FieldLabel列中,作为它们自己的列添加到另一个表中

最终目标是:

OtherTableID OtherTableColumnA CField0 CField1 CField2 CField3 CField4
ID1          ColumnValue       VALUE   VALUE   VALUE   VALUE   VALUE
我有第三个表,可以用来填充这些CField列中的值,但我不知道如何将它们作为其他表中的列

编辑 我在下面附上了我正在处理的表格的图片和文本信息。

自定义字段表

FieldId InternalFieldName FieldLabel
6       Equipment_6       CustomField1
7       Equipment_7       CustomField2
8       Equipment_8       CustomField3
9       Equipment_9       CustomField4
FieldId InternalFieldName FieldLabel
6       Equipment_6       CustomField1
7       Equipment_7       CustomField2
8       Equipment_8       CustomField3
9       Equipment_9       CustomField4
设备表

EquipmentId EquipmentNo
7362        ..12
8696        ..12_COPY2
EquipmentId EquipmentNo
7431         ..12
所需表格

EquipmentId EquipmentNo CustomField1 CustomField2 CustomField3 CustomField4
7362        ..12
8696        ..12_COPY2
EquipmentId EquipmentNo CustomField1 CustomField2 CustomField3 CustomField4
7431        ..12        True         1900-01-01   1900-01-01   NULL
重要提示:自定义字段的数量不是静态的

编辑2 我以为我可以从某一点上找到答案,但看起来这并不是(因为D-shih坚持我而大声疾呼)的情况。下面我已经包括了另一张我需要处理的表格,我想我可以自己弄清楚

我有三张桌子:

自定义字段表

FieldId InternalFieldName FieldLabel
6       Equipment_6       CustomField1
7       Equipment_7       CustomField2
8       Equipment_8       CustomField3
9       Equipment_9       CustomField4
FieldId InternalFieldName FieldLabel
6       Equipment_6       CustomField1
7       Equipment_7       CustomField2
8       Equipment_8       CustomField3
9       Equipment_9       CustomField4
CustomFieldRelationshipTable

FieldValueId FieldId EquipmentId FieldValue
66           6       7431        True
67           7       7431        1900-01-01
68           8       7431        1900-01-01
69           9       7431        NULL
设备表

EquipmentId EquipmentNo
7362        ..12
8696        ..12_COPY2
EquipmentId EquipmentNo
7431         ..12
所需表格

EquipmentId EquipmentNo CustomField1 CustomField2 CustomField3 CustomField4
7362        ..12
8696        ..12_COPY2
EquipmentId EquipmentNo CustomField1 CustomField2 CustomField3 CustomField4
7431        ..12        True         1900-01-01   1900-01-01   NULL

我认为您可以尝试将
交叉应用
与条件聚合函数一起使用

并通过动态SQL执行

CREATE TABLE CustomField(
  FieldId INT,
  InternalFieldName VARCHAR(50),
  FieldLabel VARCHAR(50)
);


INSERT INTO  CustomField VALUES (6,'Equipment_6','CustomField1');
INSERT INTO  CustomField VALUES (7,'Equipment_7','CustomField2');
INSERT INTO  CustomField VALUES (8,'Equipment_8','CustomField3');
INSERT INTO  CustomField VALUES (9,'Equipment_9','CustomField4');

CREATE TABLE Equipment(
  EquipmentId INT,
  EquipmentNo VARCHAR(50)
);


INSERT INTO Equipment VALUES (7362,'..12');
INSERT INTO Equipment VALUES (8696,'..12_COPY2');

DECLARE @cols AS NVARCHAR(MAX),
        @query  AS NVARCHAR(MAX);


SET @cols = STUFF((SELECT distinct ',max(case when FieldLabel = ''' + FieldLabel + ''' then InternalFieldName end) ' +    QUOTENAME(FieldLabel) 
            FROM CustomField
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'');


set @query = 'SELECT EquipmentId,EquipmentNo,'+@cols+'
FROM 
(
   SELECT * 
   FROM CustomField
) ta CROSS APPLY 
(
   SELECT * 
   FROM Equipment
) tb
GROUP BY  EquipmentId,
       EquipmentNo
'


EXECUTE(@query)


如果想让
CustomField
成为空字符串,只需在

SET @cols = STUFF((SELECT distinct ',max(case when FieldLabel = '''' then InternalFieldName end) ' +    QUOTENAME(FieldLabel) 
            FROM CustomField
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'');

样本数据和预期结果之间有什么关系?@D-Shih样本数据和预期结果之间没有直接关系。基本结构是:表A表B表C我需要表A中的行,作为列添加到表C中,这些列将由表B中的数据填充。表B与表A和表C有关系。请欣赏响应,但不完全如此。交叉应用将为表B中的每一行添加表B中的每一列。我需要从FieldLabel列中获取值(有关表结构,请参阅原始帖子),并将这些值作为列添加到另一个表中。因此,这个过程的一部分,在逻辑上(如果不是语法上)是一个表的轴,然后将该结果添加到另一个表中。@MPJ567好的,您能提供一些示例数据并期望得到问题的结果吗?这可以让问题更清楚。请参见编辑,并感谢您的持续帮助。这非常完美,尽管不幸的是,我无法真正理解如何从您提供给我的内容到我的最终答案。我再次进行了编辑,包括我打算从中提取数据的关系表中的信息。如果你还有耐心帮我,我会很感激的。