1

TSQL、私は SQL 2012 を使用していますが、以前のバージョンで動作するものは何でも使用します。NEWID() を使用してテーブルから TOP X のランダムな行を選択する方法を知っています。それとは別に、いくつかの方法、CTE などを使用して現在の合計を選択する方法を知っています。

しかし、これら 2 つの結果を 1 つのクエリに組み合わせるにはどうすればよいでしょうか。したがって、現在の合計が15を超えない3つのランダムレコード(および3つ以上)を選択したいと思います。これについて頭を包むことはできません...

次の単純なテーブルとデータを使用します。

CREATE TABLE TblTest (
   id    int not null identity(1,1) primary key,
   value int not null
);

INSERT INTO TblTest (value) VALUES (4);
INSERT INTO TblTest (value) VALUES (3);
INSERT INTO TblTest (value) VALUES (5);
INSERT INTO TblTest (value) VALUES (6);
INSERT INTO TblTest (value) VALUES (6);
INSERT INTO TblTest (value) VALUES (5);
INSERT INTO TblTest (value) VALUES (6);
INSERT INTO TblTest (value) VALUES (5);
INSERT INTO TblTest (value) VALUES (4);
INSERT INTO TblTest (value) VALUES (7);
INSERT INTO TblTest (value) VALUES (7);
INSERT INTO TblTest (value) VALUES (6);
INSERT INTO TblTest (value) VALUES (5);
INSERT INTO TblTest (value) VALUES (4);

私の試みは以下のとおりです。そこに NEWID を持っていることさえ意味があるかどうかはわかりません.2行しか返さないこともあれば、0を返すこともあります. .:

select top(3) ourRandID,
       id, 
       value, 
       running_total
from (
    select NEWID() as ourRandID, 
            id,
           value,
           sum(value) over (order by NEWID()) as running_total
    from TblTest
) t
where running_total < 16
4

1 に答える 1

0

これを試して:

 select     t.*
 from TblTest t
 join
 (
 select top (1) 
     t1.id [id1],t2.id [id2],t3.id [id3],
     t1.value[v1],t2.value [v2],t3.value [v3],
     t1.value+t2.value+t3.value [sum]
 from TblTest t1
 join TblTest t2 on (t1.id <> t2.id)
 join TblTest t3 on (t3.id <> t2.id and t3.id <> t1.id)
 where t1.value+t2.value+t3.value <= 15
 order by t1.value+t2.value+t3.value desc,newid() 
 ) [a] on (t.id=a.id1 or t.id=a.id2 or t.id=a.id3)
于 2012-11-14T02:46:47.957 に答える