Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Помогите решить задачку  [new]
HarDlacK
Member

Откуда:
Сообщений: 39
Подскажите как выполнить запрос несколько раз и каждый раз после выполнения результат записать в строку временной таблицы?
21 ноя 16, 15:33    [19916638]     Ответить | Цитировать Сообщить модератору
 Re: Помогите решить задачку  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
HarDlacK,

упорный...
если просто
1. CREATE TABLE #N

2. INSERT INTO #N + GO(20)
21 ноя 16, 15:37    [19916654]     Ответить | Цитировать Сообщить модератору
 Re: Помогите решить задачку  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
HarDlacK,

зачем? А то, может, рекурсивное CTE сгодится?
21 ноя 16, 15:40    [19916681]     Ответить | Цитировать Сообщить модератору
 Re: Помогите решить задачку  [new]
Верблюд
Member

Откуда: Яженичеловек!!!
Сообщений: 65007
HarDlacK
Подскажите как выполнить запрос несколько раз и каждый раз после выполнения результат записать в строку временной таблицы?


выполнить несколько раз:

CROSS APPLY :)

Записать в строку

INSERT или UPDATE или MERGE :)
21 ноя 16, 15:45    [19916706]     Ответить | Цитировать Сообщить модератору
 Re: Помогите решить задачку  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
iap,
это он не выдержал :)

https://www.sql.ru/forum/1239230/randomnyy-selekt-iz-selekta
21 ноя 16, 15:45    [19916709]     Ответить | Цитировать Сообщить модератору
 Re: Помогите решить задачку  [new]
HarDlacK
Member

Откуда:
Сообщений: 39
не получается у меня то что вы советовали. Голова квадратная.. Просто запрос у меня возвращает 4 переменные абонент клиент номер задача. Мне нужно сделать из этого запроса табличку аля:
1/2/3/4
Наталия
21 ноя 16, 15:52    [19916756]     Ответить | Цитировать Сообщить модератору
 Re: Помогите решить задачку  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
показывайте ваш так называемый "запрос"
21 ноя 16, 15:55    [19916776]     Ответить | Цитировать Сообщить модератору
 Re: Помогите решить задачку  [new]
HarDlacK
Member

Откуда:
Сообщений: 39
не получается у меня то что вы советовали. Голова квадратная.. Просто запрос у меня возвращает 4 переменные абонент клиент номер задача. Мне нужно сделать из этого запроса табличку аля:
1 / 2 / 3 / 4
Наталия / ЗОЛОТО / 12345678/ Активно
Мария / ЗОЛОТО / 12385278/ Активно
Виталий / ЗОЛОТО / 12456878/ Активно

И из этой таблички уже выбрать человека...
но если запрос просто повторять то будет:
1 / 2 / 3 / 4
Наталия / ЗОЛОТО / 12345678/ Активно
Наталия / ЗОЛОТО / 12345678/ Активно
Наталия / ЗОЛОТО / 12345678/ Активно
Тоесть мне нужно брать следующего человека и добавлять его данные в таблицу, а я немогу понять как...
21 ноя 16, 15:56    [19916792]     Ответить | Цитировать Сообщить модератору
 Re: Помогите решить задачку  [new]
HarDlacK
Member

Откуда:
Сообщений: 39
SELECT TOP 1
	@abonent_id = (SELECT TOP 1 [_SimpleKey] FROM [upk].dbo.[_InfoRg1818] WHERE [_Fld1819RRef] = (SELECT TOP 1 [_IDRRef] FROM [upk].dbo.[_Document1808] WHERE [_Fld1815]=1 AND [_Fld1817]=0	AND [_Fld1837]=0 ORDER BY [_Fld1816] desc) AND [_Fld1821RRef] = (SELECT [_IDRRef] FROM [upk].[dbo].[_Enum1809] WHERE [_EnumOrder]=6)),
	@nomer = [_Fld272],
	@klient = (SELECT TOP 1 [_Fld1820RRef] FROM [upk].dbo.[_InfoRg1818] WHERE [_Fld1819RRef] = (SELECT TOP 1 [_IDRRef] FROM [upk].dbo.[_Document1808] WHERE [_Fld1815]=1 AND [_Fld1817]=0	AND [_Fld1837]=0 ORDER BY [_Fld1816] desc) AND [_Fld1821RRef] = (SELECT [_IDRRef] FROM [upk].[dbo].[_Enum1809] WHERE [_EnumOrder]=6)),
	@zadacha = (SELECT TOP 1 [_IDRRef] FROM [upk].dbo.[_Document1808] WHERE [_Fld1815]=1 AND [_Fld1817]=0	AND [_Fld1837]=0 ORDER BY [_Fld1816] desc)		
FROM [upk].dbo._Reference16_VT270
WHERE
	[_Reference16_IDRRef] =	(SELECT TOP 1 [_Fld1820RRef] FROM [upk].dbo.[_InfoRg1818] WHERE [_Fld1819RRef] = (SELECT TOP 1 [_IDRRef] FROM [upk].dbo.[_Document1808] WHERE [_Fld1815]=1 AND [_Fld1817]=0	AND [_Fld1837]=0 ORDER BY [_Fld1816] desc) AND [_Fld1821RRef] = (SELECT [_IDRRef] FROM [upk].[dbo].[_Enum1809] WHERE [_EnumOrder]=6))
	AND	LEN([_Fld272]) = 10
	AND LEFT([_Fld272], 1) = '0'	
ORDER BY 
	[_Fld272] desc


Сообщение было отредактировано: 21 ноя 16, 16:00
21 ноя 16, 15:57    [19916799]     Ответить | Цитировать Сообщить модератору
 Re: Помогите решить задачку  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
HarDlacK,

ну, хотя бы тег [SRС] применять для вас не трудно?
Поехал в глазную клинику глаза лечить!
21 ноя 16, 15:59    [19916815]     Ответить | Цитировать Сообщить модератору
 Re: Помогите решить задачку  [new]
HarDlacK
Member

Откуда:
Сообщений: 39
Сорри, хотел отредактировать не успел)
21 ноя 16, 16:01    [19916827]     Ответить | Цитировать Сообщить модератору
 Re: Помогите решить задачку  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
select into можете попробовать, раз обычную create table не осилили, ещё можно
declare @t table(abonent_id int, ...);

а потом:

insert into @t (abonent_id, ...)
select top (1) ...


только @abonent_id вот эти переменные уберите из запроса
21 ноя 16, 16:01    [19916828]     Ответить | Цитировать Сообщить модератору
 Re: Помогите решить задачку  [new]
HarDlacK
Member

Откуда:
Сообщений: 39
Спасибо за ответ,
declare @t table
пробовал и переменные убрал, но мне выводит все ровно одного и того же клиента(
не знаю как перейти на другого(
21 ноя 16, 16:04    [19916861]     Ответить | Цитировать Сообщить модератору
 Re: Помогите решить задачку  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
что значит перейти на другого? order by newid() ?
21 ноя 16, 16:06    [19916878]     Ответить | Цитировать Сообщить модератору
 Re: Помогите решить задачку  [new]
HarDlacK
Member

Откуда:
Сообщений: 39
оно то order by, но в таблице все ровно первым стоит 1й абонент, а как мне взять второго?
21 ноя 16, 16:07    [19916895]     Ответить | Цитировать Сообщить модератору
 Re: Помогите решить задачку  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
вы о чём? выполните рекомендации форума по созданию сообщений, тогда и поговорим
21 ноя 16, 16:09    [19916912]     Ответить | Цитировать Сообщить модератору
 Re: Помогите решить задачку  [new]
HarDlacK
Member

Откуда:
Сообщений: 39
Приложить скрипты на создание таблиц? Вы это имели ввиду?
21 ноя 16, 16:15    [19916954]     Ответить | Цитировать Сообщить модератору
 Re: Помогите решить задачку  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
https://www.sql.ru/forum/rules.aspx

При написании сообщений с просьбой о составлении запроса - хорошим тоном считается предоставление скрипта на создание таблицы и заполнение ее тестовыми данными, а также ожидаемого результата выборки, если это не очевидно из вопроса.
21 ноя 16, 16:17    [19916962]     Ответить | Цитировать Сообщить модератору
 Re: Помогите решить задачку  [new]
HarDlacK
Member

Откуда:
Сообщений: 39
Тем временем у меня кое что получилось)
Спасибо ВАМ!
declare @t table(abonent_id binary(16),  nomer char(20), klient binary(16),  zadacha binary(16));

  insert into @t
  select top 1
	abonent_id = (SELECT TOP 1 [_SimpleKey] FROM [upk].dbo.[_InfoRg1818] WHERE [_Fld1819RRef] = (SELECT TOP 1 [_IDRRef] 
	FROM [upk].dbo.[_Document1808] WHERE [_Fld1815]=1 AND [_Fld1817]=0	AND [_Fld1837]=0 ORDER BY [_Fld1816] desc) AND [_Fld1821RRef] = (SELECT [_IDRRef] 
	FROM [upk].[dbo].[_Enum1809] WHERE [_EnumOrder]=6)order by newid()),
	nomer = [_Fld272],
	klient = (SELECT TOP 1 [_Fld1820RRef] FROM [upk].dbo.[_InfoRg1818] WHERE [_Fld1819RRef] = (SELECT TOP 1 [_IDRRef] 
	FROM [upk].dbo.[_Document1808] WHERE [_Fld1815]=1 AND [_Fld1817]=0	AND [_Fld1837]=0 ORDER BY [_Fld1816] desc) AND [_Fld1821RRef] = (SELECT [_IDRRef] 
	FROM [upk].[dbo].[_Enum1809] WHERE [_EnumOrder]=6)order by newid()),
	zadacha = (SELECT TOP 1 [_IDRRef] FROM [upk].dbo.[_Document1808] WHERE [_Fld1815]=1 AND [_Fld1817]=0	AND [_Fld1837]=0 ORDER BY [_Fld1816] desc)		
FROM [upk].dbo._Reference16_VT270
WHERE
	[_Reference16_IDRRef] =	(SELECT TOP 1 [_Fld1820RRef] FROM [upk].dbo.[_InfoRg1818] WHERE [_Fld1819RRef] = (SELECT TOP 1 [_IDRRef] 
	FROM [upk].dbo.[_Document1808] WHERE [_Fld1815]=1 AND [_Fld1817]=0	AND [_Fld1837]=0 ORDER BY [_Fld1816] desc) AND [_Fld1821RRef] = (SELECT [_IDRRef] 
	FROM [upk].[dbo].[_Enum1809] WHERE [_EnumOrder]=6))
	AND	LEN([_Fld272]) = 10
	AND LEFT([_Fld272], 1) = '0'
	order by [_Fld272] desc

	  insert into @t
  select top 1
	abonent_id = (SELECT [_SimpleKey] FROM [upk].dbo.[_InfoRg1818] WHERE [_Fld1819RRef] = (SELECT TOP 1 [_IDRRef] 
	FROM [upk].dbo.[_Document1808] WHERE [_Fld1815]=1 AND [_Fld1817]=0	AND [_Fld1837]=0 ORDER BY [_Fld1816] desc) AND [_Fld1821RRef] = (SELECT [_IDRRef] 
	FROM [upk].[dbo].[_Enum1809] WHERE [_EnumOrder]=6)order by newid() Offset 1 Rows Fetch Next 1 Rows Only),
	nomer = [_Fld272],
	klient = (SELECT [_Fld1820RRef] FROM [upk].dbo.[_InfoRg1818] WHERE [_Fld1819RRef] = (SELECT TOP 1 [_IDRRef] 
	FROM [upk].dbo.[_Document1808] WHERE [_Fld1815]=1 AND [_Fld1817]=0	AND [_Fld1837]=0 ORDER BY [_Fld1816] desc) AND [_Fld1821RRef] = (SELECT [_IDRRef] 
	FROM [upk].[dbo].[_Enum1809] WHERE [_EnumOrder]=6)order by newid() Offset 1 Rows Fetch Next 1 Rows Only),
	zadacha = (SELECT TOP 1 [_IDRRef] FROM [upk].dbo.[_Document1808] WHERE [_Fld1815]=1 AND [_Fld1817]=0	AND [_Fld1837]=0 ORDER BY [_Fld1816] desc)		
FROM [upk].dbo._Reference16_VT270
WHERE
	[_Reference16_IDRRef] =	(SELECT TOP 1 [_Fld1820RRef] FROM [upk].dbo.[_InfoRg1818] WHERE [_Fld1819RRef] = (SELECT TOP 1 [_IDRRef] 
	FROM [upk].dbo.[_Document1808] WHERE [_Fld1815]=1 AND [_Fld1817]=0	AND [_Fld1837]=0 ORDER BY [_Fld1816] desc) AND [_Fld1821RRef] = (SELECT [_IDRRef] 
	FROM [upk].[dbo].[_Enum1809] WHERE [_EnumOrder]=6)order by newid())
	AND	LEN([_Fld272]) = 10
	AND LEFT([_Fld272], 1) = '0'
	order by [_Fld272] desc

	  insert into @t
  select top 1
	abonent_id = (SELECT [_SimpleKey] FROM [upk].dbo.[_InfoRg1818] WHERE [_Fld1819RRef] = (SELECT TOP 1 [_IDRRef] 
	FROM [upk].dbo.[_Document1808] WHERE [_Fld1815]=1 AND [_Fld1817]=0	AND [_Fld1837]=0 ORDER BY [_Fld1816] desc) AND [_Fld1821RRef] = (SELECT [_IDRRef] 
	FROM [upk].[dbo].[_Enum1809] WHERE [_EnumOrder]=6)order by newid() Offset 1 Rows Fetch Next 1 Rows Only),
	nomer = [_Fld272],
	klient = (SELECT [_Fld1820RRef] FROM [upk].dbo.[_InfoRg1818] WHERE [_Fld1819RRef] = (SELECT TOP 1 [_IDRRef] 
	FROM [upk].dbo.[_Document1808] WHERE [_Fld1815]=1 AND [_Fld1817]=0	AND [_Fld1837]=0 ORDER BY [_Fld1816] desc) AND [_Fld1821RRef] = (SELECT [_IDRRef] 
	FROM [upk].[dbo].[_Enum1809] WHERE [_EnumOrder]=6)order by newid() Offset 1 Rows Fetch Next 1 Rows Only),
	zadacha = (SELECT TOP 1 [_IDRRef] FROM [upk].dbo.[_Document1808] WHERE [_Fld1815]=1 AND [_Fld1817]=0	AND [_Fld1837]=0 ORDER BY [_Fld1816] desc)		
FROM [upk].dbo._Reference16_VT270
WHERE
	[_Reference16_IDRRef] =	(SELECT TOP 1 [_Fld1820RRef] FROM [upk].dbo.[_InfoRg1818] WHERE [_Fld1819RRef] = (SELECT TOP 1 [_IDRRef] 
	FROM [upk].dbo.[_Document1808] WHERE [_Fld1815]=1 AND [_Fld1817]=0	AND [_Fld1837]=0 ORDER BY [_Fld1816] desc) AND [_Fld1821RRef] = (SELECT [_IDRRef] 
	FROM [upk].[dbo].[_Enum1809] WHERE [_EnumOrder]=6)order by newid())
	AND	LEN([_Fld272]) = 10
	AND LEFT([_Fld272], 1) = '0'
	order by [_Fld272] desc
	
select * from @t 

Получаю вот это на выходе http://prntscr.com/d9yqh0
Вопрос как мне рандомно выбирать данные то с 1й то со 2й или 3й строки?
21 ноя 16, 16:25    [19917045]     Ответить | Цитировать Сообщить модератору
 Re: Помогите решить задачку  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
не ну вы издеваетесь наверное над всеми. , если вам нужен вегда разный абонент abonent_id, то и сортируйте рандомно по данным откуда его получаете, а вообще дикий запрос какой-то, попробуйте сделать попроще , там явно inner/left join напрашиваются
21 ноя 16, 16:29    [19917093]     Ответить | Цитировать Сообщить модератору
 Re: Помогите решить задачку  [new]
HarDlacK
Member

Откуда:
Сообщений: 39
нет и в голове не было издеваться... Только сейчас понял что набросав order by newid() везде получаю рандомную сортировку везде, а мне как раз до наоборот надо получать одинаковую(
А вот уже при выборе конечных данных order by newid() как раз подойдет.
21 ноя 16, 16:37    [19917150]     Ответить | Цитировать Сообщить модератору
 Re: Помогите решить задачку  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
никто кроме вас не знает бизнес-логику ваших данных, попробуйте начать с самого начала и идти от простой выборки к более сложной, стараясь при этом использовать JOIN
21 ноя 16, 16:40    [19917161]     Ответить | Цитировать Сообщить модератору
 Re: Помогите решить задачку  [new]
HarDlacK
Member

Откуда:
Сообщений: 39
возьмусь сейчас за JOIN, еще вопрос на сколько быстро\долго может обрабатываться такой запрос? если их делать несколько в секунду не будет глюков, блокировок?
21 ноя 16, 16:44    [19917188]     Ответить | Цитировать Сообщить модератору
 Re: Помогите решить задачку  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
включите актуальный план выполнения и посмотрите
21 ноя 16, 16:44    [19917196]     Ответить | Цитировать Сообщить модератору
 Re: Помогите решить задачку  [new]
HarDlacK
Member

Откуда:
Сообщений: 39
Я тут прикинул что InfoRg1818 это у меня регистр (строк: 2031228), а Document1808 это таблицы из этого регистра, слишком долго будет выполняться запрос с JOIN мне так кажется...
21 ноя 16, 16:57    [19917294]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить