簡體   English   中英

如何基於另一列SQL Server 2014中的數據更新一列上的值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM