Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Передать список значений из ХП в другую ХП  [new]
Хочу запрос
Guest
Добрый день.
Прошу помощи.

Есть такая задача. Я отбираю список заказов в текстовом формате из таблицы заказов по входящему параметру дате, это в первом запросе.
Далее полученный список, один или несколько заказов, мне необходимо передавать в другой запрос. Другой запрос в условии where содержит переменную которую я хочу получать из первого запроса.

Сейчас все работает на уровне одного заказа.
Кто знает как сделать что бы работало ?.

Запрос 1.
declare @dt1 = getdate()
declare @dt2 = dateadd(day, - 1, @dt1)
Set @dt1=''2017-03-10 00:00.000''
Set @dt2 =''2017-03-11 00:00.000''
select number from T
where date between dt2 and dt1

Здесь я получаю номера в текстовом формате.
Далее я эти номера
и хочу вставить в
Запрос 2.
declare @num varchar()
select TOP 1
column1,
column2 = select column2value where date = select max(date) from T where num = @num,
column3...
from T
where num = @num

Второй запрос выдает только одну строку и ограничен условием TOP 1. Иначе внутренний подзапрос не будет правильно отбирать - будут дубли.

Кто поможет. Надо как то передавать несколько значений номеров.

Сейчас работает только для одной строки. Если например в первом запросе делать выходную переменную по максимальному значению номера.
Думаю сейчас вот о чем.
Если я запишу эти номера во временную таблицу, а второй запрос вложу в переменную, то как мне сделать цикл while ?
Спс.
15 мар 17, 13:09    [20297554]     Ответить | Цитировать Сообщить модератору
 Re: Передать список значений из ХП в другую ХП  [new]
Кесарь
Member

Откуда:
Сообщений: 453
Хочу запрос,

пошукай в направлении функций. В частности скалярных. Сможешь встроить в запрос и будет тебе почти что цикл :)

https://msdn.microsoft.com/ru-ru/library/bb630290.aspx
15 мар 17, 13:13    [20297580]     Ответить | Цитировать Сообщить модератору
 Re: Передать список значений из ХП в другую ХП  [new]
o-o
Guest
если первый запрос вернет 10 значений,
вам надо в результате второго получить результат в 10 строк
или 10 результатов по одной строке?
15 мар 17, 13:19    [20297622]     Ответить | Цитировать Сообщить модератору
 Re: Передать список значений из ХП в другую ХП  [new]
Хочу запрос
Guest
o-o,
Если первый запрос вернет 10 значений, надо в результате выполнения второго запроса получить 10 строк
Про 10 результатов в одной строке не слышал )
15 мар 17, 13:24    [20297657]     Ответить | Цитировать Сообщить модератору
 Re: Передать список значений из ХП в другую ХП  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Хочу запрос
o-o,
Если первый запрос вернет 10 значений, надо в результате выполнения второго запроса получить 10 строк
Про 10 результатов в одной строке не слышал )

и читать внимательно вы тоже не научились.
как вариант временная таблица
15 мар 17, 13:25    [20297671]     Ответить | Цитировать Сообщить модератору
 Re: Передать список значений из ХП в другую ХП  [new]
Хочу запрос
Guest
TaPaK,
Я понял о чем речь.
Тогда получается 10 результатов по одной строке.
15 мар 17, 13:31    [20297712]     Ответить | Цитировать Сообщить модератору
 Re: Передать список значений из ХП в другую ХП  [new]
Хочу запрос
Guest
Вообщем хочу получить во втором запросе столько же строк, сколько и в первом.
А как оно там внутри работает. Построчно будет передаваться или отберет все и сразу передаст уж не знаю.
По ощущениям это должно делаться как то в цикле. Получил строку, передал и так до тех пор пока они не закончатся в выборке 1 запроса.
15 мар 17, 13:35    [20297735]     Ответить | Цитировать Сообщить модератору
 Re: Передать список значений из ХП в другую ХП  [new]
o-o
Guest
Хочу запрос
o-o,
Если первый запрос вернет 10 значений, надо в результате выполнения второго запроса получить 10 строк
Про 10 результатов в одной строке не слышал )

на картинке 1 это 1 резалтсет из двух строк,
2 -- 2 резалтсета по 1 строке
----------------------
вы так криво задаете вопрос, что вам такие же кривые решения и предлагают.
цикл реализует второе, в то время как вам надо первое.
и реализуется оно не скаляркой, а инлайновой ф-цией либо прилепливанием второго запроса
к первому через cross/outer apply

К сообщению приложен файл. Размер - 7Kb
15 мар 17, 13:36    [20297736]     Ответить | Цитировать Сообщить модератору
 Re: Передать список значений из ХП в другую ХП  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
TaPaK
как вариант временная таблица
Я бы сказал - единственно правильный, удобный и универсальный вариант.
Очень плотно применял для сложного репортинга и обработок.
15 мар 17, 13:37    [20297741]     Ответить | Цитировать Сообщить модератору
 Re: Передать список значений из ХП в другую ХП  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
LSV
TaPaK
как вариант временная таблица
Я бы сказал - единственно правильный, удобный и универсальный вариант.
Очень плотно применял для сложного репортинга и обработок.

на самом деле правильный вариант понять, что же он хочет сделать, и вполне возможно что там никаких передач и не надо
15 мар 17, 13:38    [20297746]     Ответить | Цитировать Сообщить модератору
 Re: Передать список значений из ХП в другую ХП  [new]
Хочу запрос
Guest
o-o,
Да, вы правы. Первое лучше. Наверное я криво написал.
Сейчас проблема в том, что я не могу в принципе вытащить из первого запроса более одной строки.
15 мар 17, 13:40    [20297762]     Ответить | Цитировать Сообщить модератору
 Re: Передать список значений из ХП в другую ХП  [new]
o-o
Guest
попробуем с другой стороны.
надо получить:
по одной строке на (условно назовем) "заказ",
соответствующий макс. дате для данного number,
для всех number между заданными датами?
15 мар 17, 13:45    [20297781]     Ответить | Цитировать Сообщить модератору
 Re: Передать список значений из ХП в другую ХП  [new]
Хочу запрос
Guest
o-o,

В целом да. Но проблема в том, что обрабатывать второй запрос желательно именно передавая туда по одной отобранной по дате строке, если там окажется хотя бы 2 строки вложенный, подзапрос посчитает не правильно. Он будет брать мах от переданного набора.
15 мар 17, 14:08    [20297901]     Ответить | Цитировать Сообщить модератору
 Re: Передать список значений из ХП в другую ХП  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
Хочу запрос
o-o,

В целом да. Но проблема в том, что обрабатывать второй запрос желательно именно передавая туда по одной отобранной по дате строке, если там окажется хотя бы 2 строки вложенный, подзапрос посчитает не правильно. Он будет брать мах от переданного набора.
Всё сводится к одному запросу.
Ничего никуда передавать не надо.
15 мар 17, 14:12    [20297925]     Ответить | Цитировать Сообщить модератору
 Re: Передать список значений из ХП в другую ХП  [new]
Хочу запрос
Guest
iap,

Вот я и не могу додуматься как.
Если во вложенный запрос еще вложенный написать, то он не отработает. Так как опять таки будет более чем один результат.

Можете привести пример ?. Как вы это видите
Спасибо
15 мар 17, 14:46    [20298140]     Ответить | Цитировать Сообщить модератору
 Re: Передать список значений из ХП в другую ХП  [new]
medoed
Member

Откуда:
Сообщений: 936
Хочу запрос
iap,

Вот я и не могу додуматься как.
Если во вложенный запрос еще вложенный написать, то он не отработает. Так как опять таки будет более чем один результат.

Можете привести пример ?. Как вы это видите
Спасибо


А что мешает использовать сte таблицы использовать или темповые на худой конец?

	
    -- запрос 1
    WITH t AS  (SELECT * FROM sys.objects)
    --запрос 2
    SELECT TOP 100 * FROM t
 
15 мар 17, 17:13    [20298954]     Ответить | Цитировать Сообщить модератору
 Re: Передать список значений из ХП в другую ХП  [new]
o-o
Guest
medoed
Хочу запрос
iap,

Вот я и не могу додуматься как.
Если во вложенный запрос еще вложенный написать, то он не отработает. Так как опять таки будет более чем один результат.

Можете привести пример ?. Как вы это видите
Спасибо


А что мешает использовать сte таблицы использовать или темповые на худой конец?

	
    -- запрос 1
    WITH t AS  (SELECT * FROM sys.objects)
    --запрос 2
    SELECT TOP 100 * FROM t
 

то и мешает, что второй запрос имеет вид select top 1... where num = @num
т.е. для каждого num из первого запроса свой топ 1.
и это APPLY
15 мар 17, 17:25    [20299012]     Ответить | Цитировать Сообщить модератору
 Re: Передать список значений из ХП в другую ХП  [new]
medoed
Member

Откуда:
Сообщений: 936
o-o
medoed
пропущено...


А что мешает использовать сte таблицы использовать или темповые на худой конец?

	
    -- запрос 1
    WITH t AS  (SELECT * FROM sys.objects)
    --запрос 2
    SELECT TOP 100 * FROM t
 

то и мешает, что второй запрос имеет вид select top 1... where num = @num
т.е. для каждого num из первого запроса свой топ 1.
и это APPLY

Пронумеровать строки религия мешает, правда я не понял зачем до конца!?
15 мар 17, 17:42    [20299073]     Ответить | Цитировать Сообщить модератору
 Re: Передать список значений из ХП в другую ХП  [new]
o-o
Guest
хотя да, у него там все происходит в одной и той же таблице.
да и выбирает он не строку, соответствующую макс.дате для данного num,
а вообще любую строку и макс.дату к ней.
в чем смысл этого всего, непонятно.

если надо просто по одной строке на num вернуть, с макс.датой, а все остальное без разницы что,
то проще всего брать макс от всего + group by num
15 мар 17, 17:54    [20299120]     Ответить | Цитировать Сообщить модератору
 Re: Передать список значений из ХП в другую ХП  [new]
Хочу запрос
Guest
medoed,

1. В запросе 1 я получаю один столбец, из чего будет выбираться запрос 2 ?.
2. При попадании в запрос 2 более одного значения будет неверно считать max значение в подзапросе.

Вы о чем ?
15 мар 17, 19:15    [20299335]     Ответить | Цитировать Сообщить модератору
 Re: Передать список значений из ХП в другую ХП  [new]
Idol_111
Member

Откуда:
Сообщений: 605
cross apply в чистом виде.
запихните свой второй запрос в табличную функцию и используйте.
15 мар 17, 23:30    [20300004]     Ответить | Цитировать Сообщить модератору
 Re: Передать список значений из ХП в другую ХП  [new]
Хочу запрос
Guest
Idol_111,
в табличную функцию не получилось.
Прав нет.

А вот сделать выборку во временную таблицу и объединить результат и второй запрос используя cross apply получилось.

Всем спасибо за комментарии
26 мар 17, 19:43    [20334352]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить