1

さて、私はこのようなテーブルを持っています

id       | idtable2|value   | code   |name       |
1        |     3   |983     |  10    |Total      |
2        |     4   |89      |  10    |type 4     |
3        |     5   |299     |  10    |type 5     |
4        |     6   |0       |  10    |type 6     |
5        |     7   |72      |  10    |type 7     |
6        |     8   |523     |  10    |type 8     |
7        |     4   |        |  11    |percentaje4|
8        |     5   |        |  11    |percentaje5|
9        |     6   |        |  11    |percentaje6|
10       |     7   |        |  11    |percentaje7|
11       |     8   |        |  11    |percentaje8|

私には自分の価値観があり、彼らのパーセンテージが必要です。これらのパーセンテージは、表示される値に基づいています。たとえば、ID 7 の行を取得するには、それを行うことができます

declare @total int
set @total=(select value from table where name='total')
update table set value=(select value from table where code=1' and name='type 4')/@total

パーセンテージであるすべての行に対してそれを行う必要がありますが、これは動的テーブルです。別のテーブルには、ID と名前 ( table1.name it's equals to table2.name) があり、すべてのコード (10,11) の table1 には名前 (table2 から) があります。

この値を取得するにはどうすればよいですか? そのままクエリでやってみました。

update ce set valor=valor/@total from #table1 ce inner join table2 m
on ce.t2id=m.id 
where codigo=10

しかし、コード11の値ではなく、コード10で値を更新しました。どうすればできますか?

4

3 に答える 3

0

idTable2で#table1をそれ自体に結合し、一方をcodigo = 10で、もう一方をcodigo = 11でフィルター処理すると、codigo=10のvalorを使用してcodigo=11のパーセンテージを計算できます。

update ce11 
   set valor=ce10.valor/@total 
from #table1 ce11 
  inner join #table1 ce10 
     on ce11.idTable2 = ce10.idTable2
    and ce11.codigo = 11
    and ce10.codigo = 10
于 2012-04-24T17:09:16.900 に答える
0

where 句を削除すれば完了です。

update ce set valor=valor/@total from #table1 ce inner join table2 m
on ce.t2id=m.id 

何も指定する必要はありません:)

于 2012-04-24T16:25:53.140 に答える
0

IN を使用すると、where 句に複数の値を含めることができます。

update ce set valor=valor/@total from #table1 ce inner join table2 m
on ce.t2id=m.id 
where codigo in (10, 11)
于 2012-04-24T16:27:23.597 に答える