2014-02-16 25 views
0

我是sql初學者,在獲得我需要的東西時遇到了問題。 我有一個表格包括不同藥物的品牌名稱(一種藥物可能是一個品牌或任何通用的等價物)。我想用一個名字來表示毒品,而不是用不同的名字。該表如下:用SQL根據唯一值替換兩個不同名稱使用SQL

Brand name    CN 
Lisinopril    5 
Metaformin Hcl   6 
Nexuim     7 
Tylenol     8 
Glucophage    6 
Acetaminophen   8 

該CN顯示什麼藥是一般等價的。我想要的輸出是僅使用一個名稱創建新列,而不管哪一個用於兩個等效產品。如下輸出:

Brand name    CN 
Lisinopril    5 
Metaformin Hcl   6 
Nexuim     7 
Tylenol     8 
Metaformin Hcl   6 
Tylenol     8 

我使用的數據集是非常大的,並有多個產品

+1

其'品牌之一name'你想在最後輸出它'CN'是相同的選擇呢? –

+0

哪個名稱無關緊要,但如果我使用通用名稱會更好,因爲我有第三列,其名稱是帶有兩個值(0,1)的品牌,所以如果我想要通用名稱,品牌列應該是0如果我想要品牌名稱,那麼品牌欄應該是1 – user3277982

+1

這個名稱不重要?你可能試圖編寫代碼而不知道它應該做什麼。這通常是一個壞主意。 –

回答

0

爲此,可以使用窗口函數min()做:

select min(brand_name) over (partition by cn) as brand_name, cn 
from table t; 

這將分配最低brand_name每個cn

0

可以使用subquery做到這一點:

ALTER TABLE [TableName] 
ADD [Custom Brand Name] [varchar](255) 

UPDATE A 
SET [Custom Brand Name] = (SELECT MIN([Brand Name]) FROM [TableName] WHERE CN = A.CN) 
FROM [TableName] A