sql - 根据维度之间的匹配从前一行中查找值并将其插入到同一个 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 |
解决方案
您可以为此使用 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
如果这在您的应用程序中有意义,您甚至可以为此目的创建一个视图。
推荐阅读
- python - 在 Chatterbot 中使用 Ubuntu 数据集时出现 RuntimeError
- java - JasperReport 在 WildFly 中找不到符号 JREvaluator,无需服务器即可工作
- r - 如何避免for-loop *or*如何在迭代过程中动态更新purrr::map得到的结果?
- django - DetailView 中的多个独立表单
- javascript - Axios - 设置拦截器以在错误时重试原始请求
- php - WooCommerce 我的帐户仪表板:编辑帐单地址的直接链接
- java - 如何在 Java 中打开不阻止外部“安全保存”的文件?
- pandas - pd.read_sql_query 字符串列表参数折叠到第一个元素
- inno-setup - 在源中使用 {src} 时,Inno 设置中的“文件不存在”错误
- firebase - 使用 Python 3.7 和 firebase 的 Google 云函数构建错误