Я пытаюсь создать запрос, который выдаст мне случайные строки из представления (view_XYZ) на основе значения в SampleSizeByRow (в view_SampleSizeByRow), а затем вставит случайное значение из view_XYZ в tbl_Randomization.
view_SampleSizeByRow выглядит как
ID_x SampleSizeByRow
49 1
87 1
47 6
41 2
247 13
96 3
99 1
31 1
91 13
DECLARE @CurrSize AS INT
DECLARE @CurrID AS INT
DECLARE @SampleByValTbl AS TABLE(
Samplesize INT,
ID INT
)
INSERT INTO @SampleByValTbl (
Samplesize
, ID
)
SELECT SampleSizeByRow, ID_x
FROM view_SampleSizeByRow
ORDER BY ID_x;
WHILE(1=1) -- Infinite Loop until it is broken
BEGIN
SET @CurrID = NULL -- Reset pointer variables
SET @CurrSize = NULL
SELECT TOP(1) @CurrID = ID
FROM @SampleByValTbl
SELECT TOP(1) @CurrSize = Samplesize
FROM @SampleByValTbl
IF (@CurrID IS NULL OR @CurrSize IS NULL) -- End loop if there are no ID's to go through
BREAK
IF @CurrSize <= 0
BEGIN
DELETE TOP(1) FROM @SampleByValTbl
CONTINUE
END
ELSE
BEGIN
WHILE @CurrSize > 0
BEGIN
INSERT INTO tbl_Randomization (
ID_x
, Num_y
)
SELECT TOP(1) ID_x
, Num_y
FROM view_XYZ
ORDER BY NEWID() -- Random Selection
SET @CurrSize = @CurrSize - 1
END
DELETE TOP(1) FROM @SampleByValTbl -- To shorten the size of the table each time we parse through it
END
END
Результаты должны быть примерно такими, как в таблице ниже
ID_x Num_y
41 4888084
41 4895898
46 4889509
46 4889493
47 4891612
47 4898679
47 4889485
47 4902432
49 4893435
91 4898447
91 4898892
91 4895738
91 4888350
91 4898920
91 4886422
91 4899137
91 4895741
91 4886918
91 4894146
91 4888301
91 4888383
91 4882095
91 4898402
96 4893927
96 4893738
96 4887504
99 4893713
247 4897332
247 4902343
247 4897769
247 4895529
247 4885333
247 4895512
247 4895488
247 4885279
247 4893031
247 4891872
247 4896523
247 4901417
247 4885181
247 4897541
...
Я пытался использовать CTE и различные объединения, но я могу не понимаю, как их кодировать, чтобы они возвращали одинаковые результаты.