1

2 つの列を含む SQL Server テーブルがあるとします。ID, Value

サンプル データは次のようになります。

ID           value
------------------    
1            30
1            30
2            50
2            50
3            50

このクエリを実行すると:

 select ID, NEWID(), value 
 from table1 
 order by ID

結果は次のようになります。

  1            30            E152AD19-9920-4567-87FF-C4822FD9E485
  1            30            54F28C58-ABA9-4DFB-9A80-CE9C4C390CBB
  2            50            ........
  2            50            ........
  3            50            4E5A9E26-FEEC-4CC7-9AC5-96747053B6B2

しかし、私が欲しいのは、(値の合計/30) の結果に応じて ID のレコードがいくつあるかです。クエリ結果に 3 回表示されます

私が望む最終結果は次のようなものです:

  1        E152AD19-9920-4567-87FF-C4822FD9E485
  1        54F28C58-ABA9-4DFB-9A80-CE9C4C390CBB
  2        4E5A9E26-FEEC-4CC7-9AC5-96747053B6B2
  2        ....
  2        ....
  3        D861563E-E01A-4198-9E92-7BEB4678E5D1

2 表示のIDを3回メモしてください、よろしくお願いします。

4

1 に答える 1

1

のようなものはどうですか

CREATE TABLE Table1
    ([ID] int, [value] int)
;

INSERT INTO Table1
    ([ID], [value])
VALUES
    (1, 30),
    (1, 30),
    (2, 50),
    (2, 50),
    (3, 50)
;

;WITH SummedVals AS (
        SELECT  ID,
                SUM(value) / 30 Cnt
        FROM    Table1
        GROUP BY ID
)
, Vals AS (
        SELECT  ID,
                Cnt - 1 Cnt
        FROM    SummedVals
        UNION ALL
        SELECT  ID,
                Cnt - 1 Cnt
        FROM    Vals
        WHERE   Cnt > 0
)
SELECT  ID,
        NEWID()
FROM    Vals
ORDER BY 1

SQL フィドルのデモ

于 2013-08-08T04:09:19.573 に答える