【问题标题】:How to update multiple rows with multiple values?如何用多个值更新多行?
【发布时间】:2012-04-24 15:55:57
【问题描述】:

嗯,我有一张这样的桌子

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 更新值。 我该怎么办?

【问题讨论】:

    标签: sql performance sql-update inner-join bulk


    【解决方案1】:

    你可以在 where 子句中有多个值,通过使用 IN:

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

    【讨论】:

    • 不,codigo 为 11 的 valor 取自 codigo 为 10 的 valor(值)
    【解决方案2】:

    删除 where 子句就完成了:

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

    您不必指定任何内容:)

    【讨论】:

    • 否,代码为 11 时,取 value(valor) 为 10 时的值
    【解决方案3】:

    如果您在 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
    

    【讨论】:

      猜你喜欢
      • 2013-10-16
      • 1970-01-01
      • 2012-01-13
      • 2017-03-21
      • 2019-11-03
      • 1970-01-01
      • 1970-01-01
      • 2021-06-01
      • 1970-01-01
      相关资源
      最近更新 更多