2017-07-06 64 views
0

預先感謝您:用case/if語句更新多列?

我有一個表1:

id  || batches || IC_chips 

DRG001 || JHL001 || layer1 
DRG001 || JHL001 || layer2 
DRG001 || JHL001 || layer3 
DRG001 || JHL001 || layer4 
DRG001 || JHL001 || layer5 
DRG001 || JHL001 || layer6 
DRG001 || JHL002 || layer7 
DRG001 || JHL002 || layer8 
DRG001 || JHL002 || layer9 
DRG001 || JHL002 || layer10 
POQ001 || ADG001 || layer1 
POQ001 || ADG001 || layer2 
POQ001 || ADG001 || layer3 
POQ001 || ADG001 || layer4 
POQ001 || ADG001 || layer5 
POQ001 || ADG001 || layer6 

輸出表:

ID  || print_batch_1 || Print_batch_2 || Count_print_batch_1 || Count_print_batch_2 || Batch_count 
DRG001 || JHL001   || JHL002   || 06     || 04     || 02 
POQ001 || ADG001   || Null   || 06     || Null     || 01 

我用update語句嘗試過,但我面臨的一個問題,當他們不止一個打印批次。

這是我試圖用代碼:

update tab 
set Count_name=b.Count_name 
,batch_count=b.batch_count 
from 
table1 tab 
inner join 
(
select Name, count(batches) as Count_name, count(distinct batches) as 
batch_count 
from table1 
group by batches) b 
on tab.batches=b.batches 
+0

提示:這是有幫助的標記同時與相應的軟件(MySQL和甲骨文,DB2數據庫的問題。 ..)和版本,例如'的SQL服務器2014'。語法和功能的差異往往會影響答案。請注意,'tsql'縮小了選擇範圍,但不指定數據庫。 – HABO

+0

我正在使用MSSQL 2012 –

回答

1

請試試這個 -

update tab B 
set Count_name = a.batches, batch_count = batch_cnt 
from (
      select batches, count(*) batch_cnt 
      from table1 A 
      where a.batches = b.batches 
     ) 
where 
    exists (
       select 1 
       from table1 A 
       where a.batches = b.batches 
      ) 
+1

我收到此錯誤Amey:**關鍵字'where'附近的語法不正確。** –

+0

此代碼適用於Oracle SQL,不知道表'tab'的結構。另請嘗試將別名分配給'from'子句中使用的子查詢。 – Amey

+0

好吧,謝謝 –