5

Microsoft の SQL Server 2008 を使用しています。単一の値をランダムに取得するには、外部キーで集計する必要がありますが、困惑しています。次の表を検討してください。

id          fk          val
----------- ----------- ----
1           100         abc
2           101         def
3           102         ghi
4           102         jkl

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

fk          val
----------- ----
100         abc
101         def
102         ghi

fk 102 の val はランダムに "ghi" または "jkl" になります。

NEWID() を使用して一意のランダム値を取得しようとしましたが、サブクエリによって NEWID() の値が異なるため、JOIN は失敗します。

WITH withTable AS (
    SELECT id, fk, val, CAST(NEWID() AS CHAR(36)) random
    FROM exampleTable
)
SELECT t1.fk, t1.val
FROM withTable t1
JOIN (
    SELECT fk, MAX(random) random
    FROM withTable
    GROUP BY fk
) t2 ON t2.random = t1.random
;

私は困惑しています。どんなアイデアでも大歓迎です。

4

3 に答える 3