[英]How to update the values on one column based on the data from other column SQL Server 2014
我想根據SQL Server 2014中其他列的信息更新列上的值。表格式如下(注意:沒有空值)。
第一種情況:
ID Name Values TimeStamp
---- ------------------ ------ ---------
1000 ARMS Cyl L RU 10 12:00
1000 ARMS Cyl R RU 20 12:00
1000 ARMS Sph L RU 30 12:00
1000 ARMS Sph R RU 40 12:00
1000 HANDS Cylin L RU 50 12:00
1000 HANDS Cylin R RU 60 12:00
1000 HANDS Sphere L RU 70 12:00
1000 HANDS Sphere R RU 80 12:00
預期產量:
ID Name Values TimeStamp
---- ------------------ ------ ---------
1000 ARMS Cyl L RU 10 12:00
1000 ARMS Cyl R RU 20 12:00
1000 ARMS Sph L RU 30 12:00
1000 ARMS Sph R RU 40 12:00
1000 HANDS Cylin L RU 10 12:00
1000 HANDS Cylin R RU 20 12:00
1000 HANDS Sphere L RU 30 12:00
1000 HANDS Sphere R RU 40 12:00
第二種情況:
ID Name Values TimeStamp
---- ------------------ ------ ---------
1000 ARMS Cyl L RU 10 12:00
1000 ARMS Cyl R RU 20 12:00
1000 HANDS Cylin L RU 50 12:00
1000 HANDS Cylin R RU 60 12:00
1000 HANDS Sphere L RU 70 12:00
1000 HANDS Sphere R RU 80 12:00
預期產量:
ID Name Values TimeStamp
---- ------------------ ------ ---------
1000 ARMS Cyl L RU 10 12:00
1000 ARMS Cyl R RU 20 12:00
1000 HANDS Cylin L RU 10 12:00
1000 HANDS Cylin R RU 20 12:00
1000 HANDS Sphere L RU 70 12:00
1000 HANDS Sphere R RU 80 12:00
代碼的邏輯如下(這僅用於說明),我需要在數據庫查詢中顯示結果,如預期輸出所示:
if('ARMS Cyl L RU' = '')
{
/*take value from 'HANDS Cylin L RU'*/
}
else
{
/*the value is empty*/
}
/* continue on for the next 3 values for ARMS Cyl R RU, ARMS Sph L RU, ARMS Sph R RU*/
我需要編寫查詢以顯示預期的結果。 任何幫助,將不勝感激!
如果我了解您的要求,您想根據匹配的HANDS產品更新值字段中的值,以反映ARMS產品的編號。 您需要根據Cyl = Cylin和Sph = Sphere進行匹配。
在您的示例中,所有記錄具有相同的ID(即1000)。我希望情況並非如此。 看起來您應該嘗試標准化庫存項目清單,然后才擔心數量。 (建議:創建一個具有兩列的新表:一列-當前名稱,第二列-新表中所需的列,並從那里繼續前進)。
同時,我認為這段代碼可以滿足您的特定要求:
with myTable as (
select
[Name] as OriginalName,
replace(
replace(
replace(
[Name],
'HANDS','ARMS'),
'Cylin','Cyl'),
'Sphere','Sph') as StandardName,
[Values]
from YOURTABLENAMEHERE
)
update t0
set [Values] = t1.[Values]
from
myTable t0
inner join
myTable t1
on (t0.StandardName = t1.StandardName and t0.OriginalName <> t1.OriginalName)
where
t0.OriginalName like 'HANDS%'
我認為您需要為此使用合並。 這是我的查詢。 希望它能解決您的問題。
MERGE INTO first_scenario f
USING second_senario s
ON (f.name=s.name)
WHEN MATCHED THEN
UPDATE SET f.id=s.id,
f.name=s.name,
f.values=s.values,
f.timestamp=s.timestamp
WHEN NOT MATCHED THEN INSERT
VALUES (select s.id,
s.name,
s.values,
s.timestamp from second_scenario);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.