|
Прямой запрос к регистру с соединением со справочником | ☑ | ||
---|---|---|---|---|
0
zenon46
04.02.21
✎
16:39
|
Доброго дня! Не получается запрос к регистру с соединением со справочником.
Суть задачи, получить из регистра продажи самую крайнюю продажу по каждому контрагенту из таблицы #TempTable Вложенный запрос с этой задачей справляется а вот наружний нет, получаю ошибку.."Недопустимое имя столбца "Контрагент".", относится к строке "ON СпрКонтрагенты.ID = ДПослПрод.Контрагент" Что не так ? Текст запроса такой : |SELECT |ДПослПрод.IDDoc as [Док $Документ], |ДПослПрод.Контрагент AS [Контрагент $Справочник.Контрагенты] |FROM |( |SELECT TOP 1 |Рег.IDDoc as [Док $Документ], |Рег.IDDocDef as Док_вид, |$Рег.Покупатель AS [Контрагент $Справочник.Контрагенты], |CAST(LEFT(Рег.Date_Time_IDDoc, 8) as DateTime) AS ДатаПослПродажи |FROM |$Регистр.Продажи as Рег |WHERE |$Рег.Фирма = :ВбрФирма |ORDER BY |Рег.Date_Time_IDDOC DESC |) ДПослПрод |LEFT JOIN |$Справочник.Контрагенты AS СпрКонтрагенты With (NOLOCK) ON СпрКонтрагенты.ID = ДПослПрод.Контрагент |WHERE |СпрКонтрагенты.ID IN (SELECT Val FROM #TempTable) |
|||
1
vicof
04.02.21
✎
16:51
|
Недопустимое имя столбца Контрагент".
Плюс соединение будет как бы внутренним, а не левым. |
|||
2
Курцвейл
04.02.21
✎
17:07
|
А зачем делаете приведение типов в подзапросе?
попробуйте так: |SELECT |ДПослПрод.IDDoc as [Док $Документ], |ДПослПрод.Покупатель AS [Контрагент $Справочник.Контрагенты] |FROM |( |SELECT TOP 1 |Рег.IDDoc as [Док $Документ], |Рег.IDDocDef as Док_вид, |$Рег.Покупатель AS Покупатель, |CAST(LEFT(Рег.Date_Time_IDDoc, 8) as DateTime) AS ДатаПослПродажи |FROM |$Регистр.Продажи as Рег |WHERE |$Рег.Фирма = :ВбрФирма |ORDER BY |Рег.Date_Time_IDDOC DESC |) ДПослПрод |LEFT JOIN |$Справочник.Контрагенты AS СпрКонтрагенты With (NOLOCK) ON СпрКонтрагенты.ID = ДПослПрод.Покупатель |WHERE |СпрКонтрагенты.ID IN (SELECT Val FROM #TempTable) |
|||
3
zenon46
04.02.21
✎
18:14
|
Вот так запрос запускается но результат пустой :
SELECT ДПослПрод.Покупатель AS [Контрагент $Справочник.Контрагенты] FROM ( SELECT TOP 1 Рег.IDDoc as [Док $Документ], Рег.IDDocDef as Док_вид, $Рег.Покупатель AS Покупатель, CAST(LEFT(Рег.Date_Time_IDDoc, 8) as DateTime) AS ДатаПослПродажи FROM $Регистр.Продажи as Рег WHERE $Рег.Фирма = :ВбрФирма ORDER BY Рег.Date_Time_IDDOC DESC ) ДПослПрод LEFT JOIN $Справочник.Контрагенты AS СпрКонтрагенты With (NOLOCK) ON СпрКонтрагенты.ID = ДПослПрод.Покупатель WHERE СпрКонтрагенты.ID IN (SELECT Val FROM #TempTable) |
|||
4
zenon46
04.02.21
✎
18:23
|
Переделал вот так , вроде работает, проверяю :
SELECT Спр.Code AS Код, Спр.ID AS [Контрагент $Справочник.Контрагенты], subsel.ДатаПослПродажи FROM #TempTable temp left join ( SELECT $Рег.Покупатель AS [Контрагент], CAST(LEFT(MAX(Рег.Date_Time_IDDOC),8) AS datetime) AS ДатаПослПродажи FROM $Регистр.Продажи as Рег LEFT JOIN $Справочник.Контрагенты AS Спр ON Спр.ID = $Рег.Покупатель WHERE $Рег.Фирма = :ВбрФирма GROUP BY $Рег.Покупатель ) subsel on temp.val = subsel.Контрагент LEFT JOIN $Справочник.Контрагенты AS Спр ON Спр.ID = temp.val |
|||
5
Ёпрст
04.02.21
✎
19:28
|
(4) мот того, хотя бы так ?
SELECT temp.val AS [Контрагент $Справочник.Контрагенты], subsel.ДатаПослПродажи FROM #TempTable temp left join ( SELECT $Рег.Покупатель as Покупатель, CAST(LEFT(MAX(Рег.Date_Time_IDDOC),8) AS datetime) AS ДатаПослПродажи FROM $Регистр.Продажи as Рег WHERE $Рег.Фирма = :ВбрФирма and $Рег.Покупатель in (select val from #TempTable) GROUP BY $Рег.Покупатель ) subsel on temp.val = subsel.Контрагент |
|||
6
Ёпрст
04.02.21
✎
19:29
|
+5
-- subsel on temp.val = subsel.Контрагент subsel on temp.val = subsel.Покупатель |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |