0

テーブルに広告申込情報を追加する必要があります。これが私が持っているものの例です(はるかに小さいスケールで):

shiptoid,lineitem
642218,0
642218,0
642218,0
3041340,0
3041077,0
3041077,0

そしてこれが私に必要なものです

shiptoid,lineitem
642218,1
642218,2
642218,3
3041340,1
3041077,1
3041077,2

一意のshiptoidごとに、1から始まる増分ラインアイテム番号が必要です。過去に同様のことを行ったことがありますが、一生理解できません。

4

3 に答える 3

1

SQL Server を使用している場合、これは機能します。

declare @tbl table (shiptoid int)

insert into @tbl values (642218), (642218), (642218), (3041340), (3041077), (3041077)

select shiptoid, row_number() over (partition by shiptoid order by shiptoid) as lineitem    from @tbl

返されるものは次のとおりです。

shiptoid    lineitem
----------- --------------------
642218      1
642218      2
642218      3
3041077     1
3041077     2
3041340     1
于 2012-12-07T18:09:19.430 に答える
0

古いクエリ

SQL サーバーの場合:

SELECT ROW_NUMBER() 
        OVER (ORDER BY ShiptoID) AS Row, 
    ShiptoID
FROM YourShip

MYSQL の場合:

SELECT s.shiptoid, 
       @rownum := @rownum + 1 AS Row
  FROM yourship s, 
       (SELECT @rownum := 0) r

オラクルの場合:

SELECT ShiptoID, ROWNUM AS Row, 
    ShiptoID
FROM YourShip

更新されたクエリ

MySQL の場合: * SQLFIDDLE : 同じページ内の他のテーブルを無視します。

クエリ:

select y.shiptoID, y.row 
      from (select shiptoID,
      @row:=if(@x=shiptoID,@row,0) + 1 as row,
      @x:=shiptoID 
                from yourship
            order by shiptoID, row asc
    )as y

結果:

SHIPTOID    ROW
642218      1
642218      2
642218      3
3041077     1
3041077     2
3041340     1

Oracle の場合: Oracle にはRANK()DENSE_RANK() OVER PARTITIONMYSQL と同様の があります。

したがって、ORACLE の MYSQL と同様のクエリを使用できます。しかし、最良の部分は、私が節で使用ROWNUMしたことです;)つまり、3つすべての中で最も簡単なロジック/構文と言いますORDER BY

参照 : * SQLFIDDLE

クエリ:

SELECT shiptoID, 
DENSE_RANK() OVER 
(PARTITION BY shiptoID ORDER BY rownum) AS row
FROM yourShip
;

結果:

SHIPTOID    ROW
642218      1
642218      2
642218      3
3041077     1
3041077     2
3041340     1
于 2012-12-07T18:18:25.570 に答える
0

DBMS について言及していないので、これは ANSI SQL です (最新の DBMS のほとんどで動作します)。

SELECT shiptoid,
       row_number() over (partition by shiptoid) as lineitem
FROM the_table;
于 2012-12-07T19:27:46.457 に答える