首页 > 解决方案 > 根据维度之间的匹配从前一行中查找值并将其插入到同一个 SQL 数据库表中

问题描述

是否可以将“扩展”组中的“维度 3”值放入组为“完成”和“底漆”的行中?

问题在于将数据发送到 SQL 的程序没有为“Finishing”和“Primer”组提供“Dimension3”值。

数据库表[3E_IDB_Aru].dbo.Material结构如下所示:

ID P_GUID 区域 团体 代码 变体 维度1 维度2 维度3
54 519AEC 0,0504 扩大 27/1 版本 sj 2520 20 110
55 519AEC 0,0504 精加工 RAL 9005 (凯因) 2520 20 0
56 519AEC 0,0504 精加工 RAL 9010 (凯因) 2520 20 0
57 519AEC 0,1008 底漆 GW201 (凯因) 2520 40 0
58 519AEC 0,1008 底漆 ZW-400 (凯因) 2520 40 0
59 519AEC 0,0504 扩大 27/1 版本 sj 2520 20 50
60 519AEC 0,0504 精加工 RAL 9005 (凯因) 2520 20 0
61 519AEC 0,0504 精加工 RAL 9010 (凯因) 2520 20 0
62 519AEC 0,1008 底漆 GW201 (凯因) 2520 40 0
63 519AEC 0,1008 底漆 ZW-400 (凯因) 2520 40 0
64 519AEC 0,0296 扩大 27/1 顶部 sj 1480 20 110
65 519AEC 0,0296 精加工 RAL 9005 (凯因) 1480 20 0
66 519AEC 0,0296 精加工 RAL 9010 (凯因) 1480 20 0
67 519AEC 0,0592 底漆 GW201 (凯因) 1480 40 0
68 519AEC 0,0592 底漆 ZW-400 (凯因) 1480 40 0

所需的结果应如下所示(值必须写入同一个表[3E_IDB_Aru].dbo.Material):

ID P_GUID 区域 团体 代码 变体 维度1 维度2 维度3
54 519AEC 0,0504 扩大 27/1 版本 sj 2520 20 110
55 519AEC 0,0504 精加工 RAL 9005 (凯因) 2520 20 110
56 519AEC 0,0504 精加工 RAL 9010 (凯因) 2520 20 110
57 519AEC 0,1008 底漆 GW201 (凯因) 2520 40 110
58 519AEC 0,1008 底漆 ZW-400 (凯因) 2520 40 110
59 519AEC 0,0504 扩大 27/1 版本 sj 2520 20 50
60 519AEC 0,0504 精加工 RAL 9005 (凯因) 2520 20 50
61 519AEC 0,0504 精加工 RAL 9010 (凯因) 2520 20 50
62 519AEC 0,1008 底漆 GW201 (凯因) 2520 40 50
63 519AEC 0,1008 底漆 ZW-400 (凯因) 2520 40 50
64 519AEC 0,0296 扩大 27/1 顶部 sj 1480 20 110
65 519AEC 0,0296 精加工 RAL 9005 (凯因) 1480 20 110
66 519AEC 0,0296 精加工 RAL 9010 (凯因) 1480 20 110
67 519AEC 0,0592 底漆 GW201 (凯因) 1480 40 110
68 519AEC 0,0592 底漆 ZW-400 (凯因) 1480 40 110

标签: sql

解决方案


您可以为此使用 UPDATE。

UPDATE Material
   SET Dim3 = Dimension3
 WHERE (MaterialGroup = 'Finishing' OR MaterialGroup = 'Primer')
   AND Dim3 IS NOT NULL

但是您可能希望保持数据不变,而是在 SELECT 操作中执行此操作。如果您已经有很多行,则尤其如此。

SELECT ID, Fieldnumber, Area, MaterialGroup, Code, Variant, 
       Dimension1, Dimension2, Dimension3,
       CASE WHEN Dim3 IS NOT NULL            THEN Dim3
            WHEN MaterialGroup = 'Finishing' THEN Dimension3
            WHEN MaterialGroup = 'Primer'    THEN Dimension3
            ELSE                                  Dim3
       END AS Dim3

如果这在您的应用程序中有意义,您甚至可以为此目的创建一个视图。


推荐阅读