最近では、フォーラムでは、私は彼らが解決することができますが、多くの困難なSQLの問題に会ったが、数日後、彼らはの溶液を忘れて、覚えていないことができました。
だから、私は出会いの後にこの問題ことを再度、記録する必要性を感じる、との考えから回答を得ることができます。
1、SQL文言のセクション、方法を求めて!
http://bbs.csdn.net/topics/390705441
選択* K11は10のレコード持っているから
files1 files2 files3 files4
AA BB CC DD
ZZ TT YY EE
NN MM GG UU
別のテーブルのユーザーを99件の記録、内部のユーザーテーブルの今のランダムランダムに選択された3つのレコード
を選択トップ3 NEWID ()ランダム、[ユーザーID]を[ユーザー]から
ランダムユーザーID
E81A4DBB 明
F31B3B6C 陵
16574317 ティン
均等テーブル上K11上の表に結果のユーザーuserid値、最終的な結果を以下に示す
files1 files2 files3 files4ユーザーID
A1 BB CCを明DD
A2 TT EE YY玲
A3 MM GG UU玲
A4 XX XX XX明
A5 XX XX XX玲
A6 XX XX XXティン
A7 XX XX XX明
A8 XX XX XX玲
A9 XX XX XX玲
A10 XX XX XX明
SQLコード:
-
create
table k11(
-
files1
varchar(
10),
-
files2
varchar(
10),
-
files3
varchar(
10),
-
files4
varchar(
10),
-
UserId
varchar(
10))
-
-
insert
into k11
-
select
'A1',
'BB',
'CC',
'DD',
'ming'
union all
-
select
'A2',
'EE',
'TT',
'YY',
'ling'
union all
-
select
'A3',
'MM',
'GG',
'UU',
'Ting'
union all
-
select
'A4',
'XX',
'XX',
'XX',
'ming'
union all
-
select
'A5',
'XX',
'XX',
'XX',
'ling'
union all
-
select
'A6',
'XX',
'XX',
'XX',
'Ting'
union all
-
select
'A7',
'XX',
'XX',
'XX',
'ming'
union all
-
select
'A8',
'XX',
'XX',
'XX',
'ling'
union all
-
select
'A9',
'XX',
'XX',
'XX',
'Ting'
union all
-
select
'A10',
'XX',
'XX',
'XX',
'ming'
-
-
-
create
table [
user]
-
(
-
UserId
varchar(
10)
-
)
-
-
insert
into [
user]
-
select
'ming'
union all
-
select
'ling'
union all
-
select
'Ting'
-
go
-
-
-
;with t
-
as
-
(
-
select [UserId],
-
ROW_NUMBER()
over(
order
by newid())
as
rownum
-
from [
User]
-
),
-
-
tt
-
as
-
(
-
select *,
-
case
when rownum1 %
3 =
0
then
3
else rownum1 %
3
end
as
rownum
-
from
-
(
-
select *,
-
ROW_NUMBER()
over(
order
by
getdate())
as rownum1
-
from k11
-
)a
-
)
-
-
select tt.files1,tt.files2,tt.files3,tt.files4,t.UserId
-
from tt
-
left
join t
-
on tt.rownum = t.rownum
-
and t.rownum <=
3
-
/*
-
files1 files2 files3 files4 UserId
-
A1 BB CC DD ming
-
A2 EE TT YY ling
-
A3 MM GG UU Ting
-
A4 XX XX XX ming
-
A5 XX XX XX ling
-
A6 XX XX XX Ting
-
A7 XX XX XX ming
-
A8 XX XX XX ling
-
A9 XX XX XX Ting
-
A10 XX XX XX ming
-
*/
2、ランダムなデータは、100を返します。
テーブルが比較的大きい場合には、データ数千万のは、コードによって、あなたがない真にランダムの意味で、ランダムなここ100のランダムなデータを、返すことができ、そこにあるが、それは、人々が感じさせるが、あること、あなたが戻るたびにランダムでありませんデータは、キーが0秒に近いだけで62ミリ秒を消費し、非常に高速であり、同じではありません。
-
select *
-
from
-
(
-
select *,
-
ROW_NUMBER()
over(
order
by @@servername)
as
rownum
-
from dbo.xxx
-
)t
-
where
rownum
between
CHECKSUM(
getdate()) %
10000
and
CHECKSUM(
getdate()) %
10000+
99
SQL Server 分析和编译时间:
CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
(100 行受影响)
SQL Server 执行时间:
CPU 时间 = 0 毫秒,占用时间 = 62 毫秒。