1

テーブルに次のデータがあります

col1      col2              col3
276328  | 999999999999  |   664116
927356  | 999999999999  |   664140
927356  | 999999999999  |   664140
927356  | 999999999999  |   664159
927379  | 999999999999  |   664172

コード:

create table #table (col1 bigint, col2 bigint, col3 bigint)
insert into #table values(276328, 999999999999, 664116)
insert into #table values(927356, 999999999999, 664140)
insert into #table values(927356, 999999999999, 664140)
insert into #table values(927356, 999999999999, 664159)
insert into #table values(927379, 999999999999, 664172)

col1をグループ化し、そのサブグループに適用する最小値(col1)を選択しながら、Col2をCol3の値に更新する必要があります。

276328と927379は独自のグループに属していますが、927356は、col2に割り当てられるcol3番号が最小である必要があるグループです。

したがって、更新された上記の表は次のようになります。

col1        | col2      | col3
276328      | 664116    | 664116
927356      | 664140    | 664140
927356      | 664140    | 664140
927356      | 664140    | 664159
927379      | 664172    | 664172

更新する行が2m以上あるので、ループではなく一括更新する必要があります。

テーブルを更新するSQLをどのように記述しますか?

4

4 に答える 4

3
declare @myTable table (col1 bigint, col2 bigint, col3 bigint)
insert @myTable
select 276328  , 999999999999  ,   664116
union select 927356  , 999999999999  ,   664140
union select 927356  , 999999999999  ,   664140
union select 927356  , 999999999999  ,   664159
union select 927379  , 999999999999  ,   664172

update a
set a.col2 = b.col3
from @myTable a
inner join 
(
    select col1, MIN(col3) col3
    from @myTable 
    group by col1
) b
on a.col1 = b.col1


select * from @myTable
于 2012-10-25T00:19:08.020 に答える
0

使用している場合MySQL

UPDATE table1 a
        INNER JOIN
        (
            SELECT col1, minCol
            FROM
            (
                SELECT col1, MIN(col3) minCol
                FROM tableName
                GROUP BY col1
            ) c
        ) b ON a.col1 = b.col1
SET a.col2 = b.minCol
于 2012-10-25T00:28:00.313 に答える
0

RDBMS SQLServer2005+ の場合

UPDATE x
SET x.col2 = x.col3
FROM (SELECT col2, MIN(col3) OVER (PARTITION BY col1) AS col3
      FROm #table) x
于 2012-10-25T06:33:59.513 に答える
0
update t
set col2 = g.mincol3
from tbl t
join (
        select col1, min(col3) mincol3
        from tbl
        group by col1
    ) g on t.col1 = g.col1
于 2012-10-25T00:14:26.400 に答える