powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Случайный отбор строк по заданным условиям
2 сообщений из 2, страница 1 из 1
Случайный отбор строк по заданным условиям
    #39638303
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!

Есть такая задача. Нужно написать такой SQL-запрос, который случайно отбирает строки по определенным условиям. Виды отбора
1. Случайно отбирает ТТ по заданному проценту
2. Случайно отбирает ТТ по заданному проценту, так чтобы для каждого клиента пропорционально отбирались ТТ (у одного клиента могут больше одной ТТ).
3. Случайно отбирает ТТ по заданному количеству (не важно какой клиент)

Отбираются таким образом, что для каждого ТТ выгружаются все SKU и Дата.

Есть константа, который задает вид отбора.

Написал SQL-запрос, пока для третьего вида отбора. Но что то не получается. Как правильно дописать? Ошибка не из за Order By?

SQL-запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
DECLARE @Таблица table(	
	[Клиент] varchar(8),
	[Код юр лица] varchar(12),
	[Код ТТ] varchar(8),	
	[Код продукции] varchar(8),
	[Дата] date,
	[Отгрузки штук] integer	
	)	
;

INSERT INTO
  @Таблица
VALUES 
('Клиент1', 'Код юр лица1', 'Код ТТ1','SKU1', '01.01.2014', 100),
('Клиент1', 'Код юр лица1', 'Код ТТ1','SKU1', '02.01.2014', 100),
('Клиент1', 'Код юр лица1', 'Код ТТ1','SKU1', '03.01.2014', 100),
('Клиент1', 'Код юр лица1', 'Код ТТ1','SKU2', '01.01.2014', 100),
('Клиент1', 'Код юр лица1', 'Код ТТ1','SKU2', '02.01.2014', 100),
('Клиент1', 'Код юр лица1', 'Код ТТ1','SKU2', '03.01.2014', 100),
('Клиент1', 'Код юр лица1', 'Код ТТ2','SKU1', '01.01.2014', 100),
('Клиент1', 'Код юр лица1', 'Код ТТ2','SKU1', '02.01.2014', 100),
('Клиент1', 'Код юр лица1', 'Код ТТ2','SKU1', '03.01.2014', 100),
('Клиент1', 'Код юр лица1', 'Код ТТ2','SKU2', '01.01.2014', 100),
('Клиент1', 'Код юр лица1', 'Код ТТ2','SKU2', '02.01.2014', 100),
('Клиент1', 'Код юр лица1', 'Код ТТ2','SKU2', '03.01.2014', 100),
('Клиент2', 'Код юр лица2', 'Код ТТ1','SKU1', '01.01.2014', 100),
('Клиент2', 'Код юр лица2', 'Код ТТ1','SKU1', '02.01.2014', 100),
('Клиент2', 'Код юр лица2', 'Код ТТ1','SKU1', '03.01.2014', 100),
('Клиент2', 'Код юр лица2', 'Код ТТ1','SKU2', '01.01.2014', 100),
('Клиент2', 'Код юр лица2', 'Код ТТ1','SKU2', '02.01.2014', 100),
('Клиент2', 'Код юр лица2', 'Код ТТ1','SKU2', '03.01.2014', 100),
('Клиент2', 'Код юр лица2', 'Код ТТ2','SKU1', '01.01.2014', 100),
('Клиент2', 'Код юр лица2', 'Код ТТ2','SKU1', '02.01.2014', 100),
('Клиент2', 'Код юр лица2', 'Код ТТ2','SKU1', '03.01.2014', 100),
('Клиент2', 'Код юр лица2', 'Код ТТ2','SKU2', '01.01.2014', 100),
('Клиент2', 'Код юр лица2', 'Код ТТ2','SKU2', '02.01.2014', 100),
('Клиент2', 'Код юр лица2', 'Код ТТ2','SKU2', '03.01.2014', 100),
('Клиент3', 'Код юр лица3', 'Код ТТ1','SKU1', '01.01.2014', 100),
('Клиент3', 'Код юр лица3', 'Код ТТ1','SKU1', '02.01.2014', 100),
('Клиент3', 'Код юр лица3', 'Код ТТ1','SKU1', '03.01.2014', 100),
('Клиент3', 'Код юр лица3', 'Код ТТ2','SKU1', '01.01.2014', 100),
('Клиент3', 'Код юр лица3', 'Код ТТ2','SKU1', '02.01.2014', 100),
('Клиент3', 'Код юр лица3', 'Код ТТ2','SKU1', '03.01.2014', 100),
('Клиент3', 'Код юр лица3', 'Код ТТ3','SKU1', '01.01.2014', 100),
('Клиент3', 'Код юр лица3', 'Код ТТ3','SKU1', '02.01.2014', 100),
('Клиент3', 'Код юр лица3', 'Код ТТ3','SKU1', '03.01.2014', 100),
('Клиент3', 'Код юр лица3', 'Код ТТ4','SKU1', '01.01.2014', 100),
('Клиент3', 'Код юр лица3', 'Код ТТ4','SKU1', '02.01.2014', 100),
('Клиент3', 'Код юр лица3', 'Код ТТ4','SKU1', '03.01.2014', 100)

--Тип отбора ТТ
--1. Случайно отбирает ТТ по заданному проценту
--2. Случайно отбирает ТТ по заданному проценту, так чтобы для каждого клиента пропорционально отбирались ТТ.
--3. Случайно отбирает ТТ по заданному количеству
DECLARE @ТипОтбора INTEGER =3;

--Для типа отбора ТТ 1 и 2
DECLARE @ЗаданныйПроцентТТВыборка decimal(2,2) = 0.07;
DECLARE @РасcчитанноеКоличествоТТ INTEGER;
--Для типа отбора ТТ 3
DECLARE @ЗаданноеКоличествоТТВыборка integer = 2;

SET @РасcчитанноеКоличествоТТ = ROUND (@ЗаданныйПроцентТТВыборка * (SELECT count(*) FROM @Таблица),0);

SELECT
	[Клиент],
	[Код юр лица],
	[Код ТТ],	
	[Код продукции],
	[Дата],
	[Отгрузки штук]
FROM
	@Таблица
INNER JOIN	
	(CASE
		WHEN @ТипОтбора= 1 THEN

		WHEN @ТипОтбора= 2 THEN

		WHEN @ТипОтбора= 3 THEN	
			(SELECT TOP 1 
				Таб1.[Код ТТ]	
			FROM
				(SElECT DISTINCT [Код ТТ] FROM @Таблица) AS Таб1
			ORDER BY
				NEWID()) AS ФИЛЬТР_ТТ
	END)
ON
	@Таблица.[Код ТТ] = ФИЛЬТР_ТТ.[Код ТТ]

...
Рейтинг: 0 / 0
Случайный отбор строк по заданным условиям
    #39638489
Glebanski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikk,

Я пожалуй не постесняюсь и напишу, что еще не видел, как таблицу джойнят с результатом выражения CASE.
Если это не 80lvl владения T-SQL, то тогда ошибка. И плясать надо отсюда.

ЗЫ: https://www.mssqltips.com/sqlservertip/3157/different-ways-to-get-random-data-for-sql-server-data-sampling/
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Случайный отбор строк по заданным условиям
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]