0

CusIDvariable に従って選択できるカウンターとなるような列を追加しようとしています@nrows。この場合@nrowsは 3 で、追加されたテーブルの日付を単純に下に移動し、行の各項目に対してカウンターを追加します。

CustID --- DateAdded ---

 1         2012-02-09 
 1         2012-02-09 
 1         2012-02-08 
 2         2012-02-07 
 2         2012-02-07
 2         2012-02-07 
 3         2012-02-06
 3         2012-02-06

誰かが MSSQL でそれを行う方法を教えてくれたら、大歓迎です。

4

4 に答える 4

1

これは Excel で 2 つの式を使用して実行できます。最初の式は行をカウントし、@nrows と比較します

スクリーンショットの場所 A3

=IF(B3=B2,(A2+1),1)

2 番目に、ID、場所 B4 をスクリーン ショットに配置します。

=IF(A3=$B$1,B3+1,B3)

B1 の値は変数「@nrows」です。

B3 の値はスターター ID であるため、任意の値から開始できます。

ここに画像の説明を入力

于 2013-03-20T11:57:48.177 に答える
1

=MAX(1,ROUNDUP(ROW()/@NROWS,0)) についてはどうでしょうか。これにより、必要な結果が得られると思います。

うまくいかない理由の1つは、OPが使用したいと示した「@NROWS」変数です。私のテストでは =MAX(1,ROUNDUP(ROW()/3,0)) を使用したことを告白します

于 2013-03-20T12:15:36.960 に答える
0

ROW_NUMBER()関数を行セットに適用します。1から始まる連続番号が生成されます。それらに追加@nrows - 1し、結果を次のように除算して変更し@nrowsます。

SELECT
  CustID = (ROW_NUMBER() OVER (ORDER BY DateAdded) + @nrows - 1) / @nrows,
  DateAdded
FROM atable
;

SQLFiddleのデモを参照してください。

于 2013-03-22T12:14:52.723 に答える
0

Excelでそれを行う方法がわかりませんが、最初にデータをSQLサーバーにロードできます。次に、次の構文が役立ちます


select NTILE(@NRows) over (order by DateAdded desc), DateAdded from tablename

于 2013-03-20T03:20:28.770 に答える