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

但我得到它用代码 10 更新值,而不是用代码 11 更新值。我该怎么做?

4

3 回答 3

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 回答
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 回答