[英]Find and insert a value from previous row based on a match between dimensions into the same SQL database table
是否可以將組“擴展”中的“維度 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 | (kein) | 2520 | 20 | 0 |
56 | 519AEC | 0,0504 | 精加工 | RAL 9010 | (kein) | 2520 | 20 | 0 |
57 | 519AEC | 0,1008 | 底漆 | GW201 | (kein) | 2520 | 40 | 0 |
58 | 519AEC | 0,1008 | 底漆 | ZW-400 | (kein) | 2520 | 40 | 0 |
59 | 519AEC | 0,0504 | 延期 | 27/1 版 | sj | 2520 | 20 | 110 |
60 | 519AEC | 0,0504 | 精加工 | RAL 9005 | (kein) | 2520 | 20 | 0 |
61 | 519AEC | 0,0504 | 精加工 | RAL 9010 | (kein) | 2520 | 20 | 0 |
62 | 519AEC | 0,1008 | 底漆 | GW201 | (kein) | 2520 | 40 | 0 |
63 | 519AEC | 0,1008 | 底漆 | ZW-400 | (kein) | 2520 | 40 | 0 |
64 | 519AEC | 0,0296 | 延期 | 27/1 頂部 | sj | 1480 | 20 | 110 |
65 | 519AEC | 0,0296 | 精加工 | RAL 9005 | (kein) | 1480 | 20 | 0 |
66 | 519AEC | 0,0296 | 精加工 | RAL 9010 | (kein) | 1480 | 20 | 0 |
67 | 519AEC | 0,0592 | 底漆 | GW201 | (kein) | 1480 | 40 | 0 |
68 | 519AEC | 0,0592 | 底漆 | ZW-400 | (kein) | 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 | (kein) | 2520 | 20 | 110 |
56 | 519AEC | 0,0504 | 精加工 | RAL 9010 | (kein) | 2520 | 20 | 110 |
57 | 519AEC | 0,1008 | 底漆 | GW201 | (kein) | 2520 | 40 | 110 |
58 | 519AEC | 0,1008 | 底漆 | ZW-400 | (kein) | 2520 | 40 | 110 |
59 | 519AEC | 0,0504 | 延期 | 27/1 版 | sj | 2520 | 20 | 110 |
60 | 519AEC | 0,0504 | 精加工 | RAL 9005 | (kein) | 2520 | 20 | 110 |
61 | 519AEC | 0,0504 | 精加工 | RAL 9010 | (kein) | 2520 | 20 | 110 |
62 | 519AEC | 0,1008 | 底漆 | GW201 | (kein) | 2520 | 40 | 110 |
63 | 519AEC | 0,1008 | 底漆 | ZW-400 | (kein) | 2520 | 40 | 110 |
64 | 519AEC | 0,0296 | 延期 | 27/1 頂部 | sj | 1480 | 20 | 110 |
65 | 519AEC | 0,0296 | 精加工 | RAL 9005 | (kein) | 1480 | 20 | 110 |
66 | 519AEC | 0,0296 | 精加工 | RAL 9010 | (kein) | 1480 | 20 | 110 |
67 | 519AEC | 0,0592 | 底漆 | GW201 | (kein) | 1480 | 40 | 110 |
68 | 519AEC | 0,0592 | 底漆 | ZW-400 | (kein) | 1480 | 40 | 110 |
您可以為此使用更新。
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
如果這在您的應用程序中有意義,您甚至可以為此目的創建一個視圖。
在源數據集和目標數據集之間使用交叉應用。 源數據集使用 case when condition 找到等於 Primer 和 Finishing 的組以將維度 3 移動到 dim3 列中
declare @tmp as table(ID int, P_GUID varchar(20), Area varchar(20), [Group] varchar(20), Code varchar(20), Variant varchar(20), Dimension1 int, Dimension2 int, Dimension3 int,Dim3 int)
INSERT INTO @tmp(ID,P_GUID, Area, [Group], Code, Variant, Dimension1, Dimension2, Dimension3, Dim3)
values
(54,'519AEC','0,0504','Extension','27/1 ver','sj',2520,20,110,NULL)
,(55,'519AEC','0,0504','Finishing','RAL 9005','(kein)',2520,20,0,NULL)
,(56,'519AEC','0,0504','Finishing','RAL 9010','(kein)',2520,20,0,NULL)
,(57,'519AEC','0,1008','Primer','GW201','(kein)',2520,40,0,NULL)
,(58,'519AEC','0,1008','Primer','ZW-400','(kein)',2520,40,0,NULL)
,(59,'519AEC','0,0504','Extension','27/1 ver','sj',2520,20,110,NULL)
,(60,'519AEC','0,0504','Finishing','RAL 9005','(kein)',2520,20,0,NULL)
,(61,'519AEC','0,0504','Finishing','RAL 9010','(kein)',2520,20,0,NULL)
,(62,'519AEC','0,1008','Primer','GW201','(kein)',2520,40,0,NULL)
,(63,'519AEC','0,1008','Primer','ZW-400','(kein)',2520,40,0,NULL)
,(64,'519AEC','0,0296','Extension','27/1 top','sj',1480,20,110,NULL)
,(65,'519AEC','0,0296','Finishing','RAL 9005','(kein)',1480,20,0,NULL)
,(66,'519AEC','0,0296','Finishing','RAL 9010','(kein)',1480,20,0,NULL)
,(67,'519AEC','0,0592','Primer','GW201','(kein)',1480,40,0,NULL)
,(68,'519AEC','0,0592','Primer','ZW-400','(kein)',1480,40,0,NULL)
update target
set
target.Dim3=source.Dim3
from @tmp as target
cross apply
(
select
case when [Group] in('Finishing', 'Primer') then Dimension3 end Dim3
from @tmp data
where target.ID=data.ID
)source
select * from @tmp
輸出
ID P_GUID Area Group Code Variant Dimension1 Dimension2 Dimension3 Dim3
54 519AEC 0,0504 Extension 27/1 ver sj 2520 20 110 NULL
55 519AEC 0,0504 Finishing RAL 9005 (kein) 2520 20 0 0
56 519AEC 0,0504 Finishing RAL 9010 (kein) 2520 20 0 0
57 519AEC 0,1008 Primer GW201 (kein) 2520 40 0 0
58 519AEC 0,1008 Primer ZW-400 (kein) 2520 40 0 0
59 519AEC 0,0504 Extension 27/1 ver sj 2520 20 110 NULL
60 519AEC 0,0504 Finishing RAL 9005 (kein) 2520 20 0 0
61 519AEC 0,0504 Finishing RAL 9010 (kein) 2520 20 0 0
62 519AEC 0,1008 Primer GW201 (kein) 2520 40 0 0
63 519AEC 0,1008 Primer ZW-400 (kein) 2520 40 0 0
64 519AEC 0,0296 Extension 27/1 top sj 1480 20 110 NULL
65 519AEC 0,0296 Finishing RAL 9005 (kein) 1480 20 0 0
66 519AEC 0,0296 Finishing RAL 9010 (kein) 1480 20 0 0
67 519AEC 0,0592 Primer GW201 (kein) 1480 40 0 0
68 519AEC 0,0592 Primer ZW-400 (kein) 1480 40 0 0
我使用CROSS Apply來實現這一點:
UPDATE a SET
a.[Dimension3] = b.[Dimension3]
FROM
Material As a
CROSS Apply (
SELECT Top 1 [Dimension3]
FROM Material
WHERE
( [Pos_GUID] = a.[Pos_GUID] )
AND ( [Dimension1] = a.[Dimension1] )
AND ( [Dimension2] = a.[Dimension2] )
OR ( [Dimension2] * 2 = a.[Dimension2] )
AND ( [ID] < a.[ID] )
AND ( a.[Dimension3] = 0 )
AND ( [Dimension3] Is Not Null )
) As b
在真實數據庫中,Pos_GUID 值都是混合的,但 ID 號總是在同一個 Pos_GUID 下按升序排列。 對於 ID < a.ID 比較,我添加了 Pos_GUID 值必須相同且 Dimension1 和 Dimension2 值必須匹配的條件。
下面是刪除了一些不必要的列的實際數據庫的一部分。
ID | Pos_GUID | 材料組 | 維度1 | 維度2 | 維度3 |
---|---|---|---|---|---|
149 | 2E31E29F763844DA806B9868C403E219 | 精加工 | 1361 | 19.5 | 0 |
149 | 519AEC1C7EB54C0B8DBC562A5194E38A | 延期 | 1500 | 18 | 89.5 |
150 | 2E31E29F763844DA806B9868C403E219 | 底漆 | 1361 | 19.5 | 0 |
150 | 519AEC1C7EB54C0B8DBC562A5194E38A | 精加工 | 1500 | 18 | 0 |
151 | 519AEC1C7EB54C0B8DBC562A5194E38A | 精加工 | 1500 | 18 | 0 |
152 | 2E31E29F763844DA806B9868C403E219 | 精加工 | 551.67 | 19.5 | 0 |
152 | 519AEC1C7EB54C0B8DBC562A5194E38A | 底漆 | 1500 | 36 | 0 |
153 | 2E31E29F763844DA806B9868C403E219 | 底漆 | 551.67 | 19.5 | 0 |
153 | 519AEC1C7EB54C0B8DBC562A5194E38A | 底漆 | 1500 | 36 | 0 |
154 | 519AEC1C7EB54C0B8DBC562A5194E38A | 延期 | 2520 | 20 | 110 |
155 | 2E31E29F763844DA806B9868C403E219 | 精加工 | 1361 | 19.5 | 0 |
155 | 519AEC1C7EB54C0B8DBC562A5194E38A | 精加工 | 2520 | 20 | 0 |
156 | 2E31E29F763844DA806B9868C403E219 | 底漆 | 1361 | 19.5 | 0 |
156 | 519AEC1C7EB54C0B8DBC562A5194E38A | 精加工 | 2520 | 20 | 0 |
157 | 519AEC1C7EB54C0B8DBC562A5194E38A | 底漆 | 2520 | 40 | 0 |
158 | 2E31E29F763844DA806B9868C403E219 | 精加工 | 2000年 | 82 | 0 |
158 | 519AEC1C7EB54C0B8DBC562A5194E38A | 底漆 | 2520 | 40 | 0 |
159 | 2E31E29F763844DA806B9868C403E219 | 精加工 | 2000年 | 82 | 0 |
159 | 519AEC1C7EB54C0B8DBC562A5194E38A | 延期 | 2520 | 20 | 110 |
160 | 2E31E29F763844DA806B9868C403E219 | 底漆 | 2000年 | 164 | 0 |
160 | 519AEC1C7EB54C0B8DBC562A5194E38A | 精加工 | 2520 | 20 | 0 |
161 | 519AEC1C7EB54C0B8DBC562A5194E38A | 精加工 | 2520 | 20 | 0 |
162 | 2E31E29F763844DA806B9868C403E219 | 精加工 | 2000年 | 82 | 0 |
162 | 519AEC1C7EB54C0B8DBC562A5194E38A | 底漆 | 2520 | 40 | 0 |
結果:
ID | Pos_GUID | 材料組 | 維度1 | 維度2 | 維度3 |
---|---|---|---|---|---|
149 | 2E31E29F763844DA806B9868C403E219 | 精加工 | 1361 | 19.5 | 0 |
149 | 519AEC1C7EB54C0B8DBC562A5194E38A | 延期 | 1500 | 18 | 89.5 |
150 | 2E31E29F763844DA806B9868C403E219 | 底漆 | 1361 | 19.5 | 0 |
150 | 519AEC1C7EB54C0B8DBC562A5194E38A | 精加工 | 1500 | 18 | 89.5 |
151 | 519AEC1C7EB54C0B8DBC562A5194E38A | 精加工 | 1500 | 18 | 89.5 |
152 | 2E31E29F763844DA806B9868C403E219 | 精加工 | 551.67 | 19.5 | 0 |
152 | 519AEC1C7EB54C0B8DBC562A5194E38A | 底漆 | 1500 | 36 | 89.5 |
153 | 2E31E29F763844DA806B9868C403E219 | 底漆 | 551.67 | 19.5 | 0 |
153 | 519AEC1C7EB54C0B8DBC562A5194E38A | 底漆 | 1500 | 36 | 89.5 |
154 | 519AEC1C7EB54C0B8DBC562A5194E38A | 延期 | 2520 | 20 | 110 |
155 | 2E31E29F763844DA806B9868C403E219 | 精加工 | 1361 | 19.5 | 0 |
155 | 519AEC1C7EB54C0B8DBC562A5194E38A | 精加工 | 2520 | 20 | 110 |
156 | 2E31E29F763844DA806B9868C403E219 | 底漆 | 1361 | 19.5 | 0 |
156 | 519AEC1C7EB54C0B8DBC562A5194E38A | 精加工 | 2520 | 20 | 110 |
157 | 519AEC1C7EB54C0B8DBC562A5194E38A | 底漆 | 2520 | 40 | 110 |
158 | 2E31E29F763844DA806B9868C403E219 | 精加工 | 2000年 | 82 | 0 |
158 | 519AEC1C7EB54C0B8DBC562A5194E38A | 底漆 | 2520 | 40 | 110 |
159 | 2E31E29F763844DA806B9868C403E219 | 精加工 | 2000年 | 82 | 0 |
159 | 519AEC1C7EB54C0B8DBC562A5194E38A | 延期 | 2520 | 20 | 110 |
160 | 2E31E29F763844DA806B9868C403E219 | 底漆 | 2000年 | 164 | 0 |
160 | 519AEC1C7EB54C0B8DBC562A5194E38A | 精加工 | 2520 | 20 | 110 |
161 | 519AEC1C7EB54C0B8DBC562A5194E38A | 精加工 | 2520 | 20 | 110 |
162 | 2E31E29F763844DA806B9868C403E219 | 精加工 | 2000年 | 82 | 0 |
162 | 519AEC1C7EB54C0B8DBC562A5194E38A | 底漆 | 2520 | 40 | 110 |
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.