簡體   English   中英

使用 SQL Server 中具有兩個條目(值)的同一表中的另一列更新一列

[英]Update a column using another column in the same table with two entries (Values) in SQL Server

我正在嘗試從同一表中名為Product的列更新Product_Group列。 Product列有兩個條目, SimpleOthers 即在Invoice表中顯示如下:

發票表

我遇到的問題是,如果您查看 Top_Level ID 10、19、21 和 31 有多個條目,並且產品也是多個(即簡單和其他)。

我想要實現的是,當我看到 Top_Level 擁有 Simple 和 Others 時,將 Product_Group 列更新為“Simple/Other”

最終結果

我怎樣才能做到這一點?

如果您只有 2 個產品,則可以使用:

WITH cte AS (
   SELECT Top_Level, COUNT(DISTINCT Product) AS cnt
   FROM tab
   GROUP BY Top_Level
)
UPDATE t
SET Product_group = CASE WHEN cnt = 1 THEN t.Product ELSE 'Others/Simple' END;
FROM tab t
JOIN cte ctab
  ON c.Top_Level = t.Top_Level;

您只有兩組,因此您可以使用窗口函數min()max()

select i.*,
       (case when min(product) over (partition by top_level) =
                  max(product) over (partition by top_level)
             then product
             else 'Other/Simple'
        end) as product_group
from invoices i;

如果product可能是NULL您可能希望使用min(product) over (partition by top_level)

這種方法不能(容易)推廣到兩個以上的群體。 但是在這種情況下它應該可以很好地工作。

編輯:

如果您確實想更新該列,只需使用 CTE:

with toupdate as (
      select i.*,
             (case when min(product) over (partition by top_level) =
                        max(product) over (partition by top_level)
                   then product
                   else 'Other/Simple'
              end) as new_product_group
      from invoices i
     )
update toupdate
    set product_group = new_product_group;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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