2017-07-06 8 views
0

は、事前にありがとう:case/if文で複数の列を更新しますか?

を私はTABLE1を持っている:

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 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のは、Oracle、DB2、両方でデータベースの質問にタグを付けると便利です。 ..)とバージョン、例えば'sql-server-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

大丈夫、ありがとう –

関連する問題