|
v7: Соединение в прямом запросе | ☑ | ||
---|---|---|---|---|
0
pofigos
21.05.14
✎
12:22
|
Добрый день! Прошу помощи в соединении в прямом запросе..
Есть изначальный запрос: ТекстЗапроса = " |SELECT | $РегЛист.КонтрагентТек [Контрагент $Справочник.Контрагенты] | , РегЛист.IDDOC [Ссылка $Документ.РегЛист] | , $ПоследнееЗначение.Контрагенты.Менеджер($РегЛист.КонтрагентТек, :ДатаАктуальности) [Менеджер $Справочник.Сотрудники] |FROM $Документ.РегЛист AS РегЛист With (NOLOCK) |"; Есть дополнение по строкам: ТекстЗапроса = " | (SELECT TOP (1) $РегЛистСтроки.Статус [Статус $Перечисление.СтатусРегЛиста] | FROM $ДокументСтроки.РегЛист AS РегЛистСтроки With (NOLOCK) | WHERE ($РегЛистСтроки.Статус <> $ПустойИд) | AND (РегЛистСтроки.IDDOC = РегЛист.IDDOC) | AND ($РегЛистСтроки.ДатаДокумента <= :ДатаАктуальности) | ORDER BY $РегЛистСтроки.ДатаДокумента DESK) |"; По отдельности все отрабатывает корректно и верно, но при попытке соеденить эти 2 запроса в 1 - не получается ( Может конечно от жары уже мозг плавится, но примерно делал так: ТекстЗапроса = " |SELECT | $РегЛист.КонтрагентТек [Контрагент $Справочник.Контрагенты] | , РегЛист.IDDOC [Ссылка $Документ.РегЛист] | , РегЛистСтрока.НомерСтроки | , РегЛистСтрока.ДатаДокумента | , РегЛистСтрока.Статус [Статус $Перечисление.СтатусРегЛиста] | , $ПоследнееЗначение.Контрагенты.Менеджер($РегЛист.КонтрагентТек, :ДатаАктуальности) [Менеджер $Справочник.Сотрудники] |FROM $Документ.РегЛист AS РегЛист With (NOLOCK) | |LEFT JOIN (SELECT TOP (1) РегЛистСтроки.IDDOC Ссылка | , РегЛистСтроки.LINENO_ НомерСтроки | , $РегЛистСтроки.Статус Статус | , $РегЛистСтроки.ДатаДокумента ДатаДокумента | FROM $ДокументСтроки.РегЛист AS РегЛистСтроки With (NOLOCK) | WHERE ($РегЛистСтроки.Статус <> $ПустойИд) | AND ($РегЛистСтроки.ДатаДокумента <= :ДатаАктуальности) | ORDER BY РегЛистСтроки.ДатаДокумента DESC |) as РегЛистСтрока on РегЛистСтрока.Ссылка = РегЛист.IDDOC | | |"; |
|||
1
Попытка1С
21.05.14
✎
12:33
|
Какую ошибку то хоть пишет?
|
|||
2
pofigos
21.05.14
✎
12:34
|
(0) Добавлю, что при левом соединении без "TOP (1)" выборка проходит отлично и выдает все строки по каждому документу. Но, необходима только одна строка удовлетворяющая условиям :(
|
|||
3
pofigos
21.05.14
✎
12:36
|
(1) Ошибку не пишет. Запрос отрабатывает. Для проверки вывел РегЛистСтрока.НомерСтроки РегЛистСтрока.ДатаДокумента. Номер выдает 0 и соответственно дату пустую.
|
|||
4
pofigos
21.05.14
✎
13:00
|
(1) Ошибку понял. Не верно в принципе соединение.
Натолкните, как правильно выбирать только одну строку многострочной части для каждого документа? Вариант конечно через CASE можно сделать, но как сделать отбор по конструкции CASE? |
|||
5
Ёпрст
21.05.14
✎
13:04
|
(0) либо коррелированный подзапрос с топ-1 в селект листе, либо левое соедиенение с подзапросом, в котором max + group by заместо top1 и order by
|
|||
6
pofigos
21.05.14
✎
13:11
|
(5)Спасибо. Буду пробовать.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |