|
v7: Количество документов в запросе | ☑ | ||
---|---|---|---|---|
0
zenon46
08.11.19
✎
12:27
|
Доброго дня!
Как получить по каждой номенклатуре из СЗ в запросе количество документов в ТЧ которых она встречается. Делаю так : но получаю только одно общее число в TempTable - лежат элементы справочника номенклатура |SELECT | count(distinct Док.IDDOC)AS КолПоступ |FROM | _1SJourn Жур |INNER JOIN | $ДокументСтроки.ПоступлениеТМЦ_Склад AS Док ON Док.IDDoc = Жур.IDDoc |WHERE | Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND | ($ДокументСтроки.ПоступлениеТМЦ_Склад.Номенклатура IN (SELECT Val FROM #TempTable)) |
|||
1
ДенисЧ
08.11.19
✎
12:29
|
Добавь в выбор номенклатуру
и сгруппируй по иддок, номенклатура |
|||
2
Волшебник
08.11.19
✎
12:30
|
нужно добавить
SELECT Номенклатура, count(*) ... GROUP BY Номенклатура ... |
|||
3
Ёпрст
08.11.19
✎
13:14
|
(2) это не верно, если одна и таже номенклатура в разных строчках, в каунт надо не * пихать
|
|||
4
Волшебник
08.11.19
✎
13:15
|
(3) Точно
|
|||
5
Ёпрст
08.11.19
✎
13:15
|
(1) группировать по iddoc не надо, ему же количество доков надо
|
|||
6
dk
08.11.19
✎
13:27
|
ну и напоследок не забываем про (NOLOCK) в запросах )
|
|||
7
palpetrovich
08.11.19
✎
13:52
|
(6) не, напослеждок не забываем про оконные функции https://habr.com/ru/post/268983/ :)
|
|||
8
zenon46
08.11.19
✎
15:01
|
Запрос не возвращает 0, по тем позициям из СЗ, которые не нашлись в документах, как это можно побороть ?
|
|||
9
Ёпрст
08.11.19
✎
15:04
|
(8) union all select 0,val from #TempTable
|
|||
10
Ёпрст
08.11.19
✎
15:04
|
и сверху group by
|
|||
11
Ёпрст
08.11.19
✎
15:06
|
ну или в селект из временной и левое соединение с фильтром к табличной части дока + nullif или coalesce в селекте
|
|||
12
palpetrovich
08.11.19
✎
15:47
|
имхо, так интересней все-же
select distinct ДокТ.Товар ,Count(IsNull(ДокТ.ИдДокумента, 0)) OVER (PARTITION BY ДокТ.Товар) КвоДок from dbo.ДокументТ_РасходнаяНакладная as ДокТ with (NoLOck) join dbo.Журнал as Жур with (NoLOck) On ДокТ.ИдДокумента = Жур.ИдДокумента and Жур.Позиция > '20191001' -- если нужно ограничить по дате Where 1=1 and ДокТ.Товар in (SELECT Val FROM #СпТоваров) есичё - у нас используются предствления, ДокументТ_РасходнаяНакладная = $ДокументСтроки.РасходнаяНакладная |
|||
13
dk
08.11.19
✎
15:50
|
а зачем nolock на представления?
|
|||
14
Ёпрст
08.11.19
✎
15:51
|
(12) щас тс сообщит, что у него 2000 скуль и нема оконных функций.. (
|
|||
15
palpetrovich
08.11.19
✎
15:55
|
(13) дык, представление - это всего-лишь "обертка"
SELECT [IDDOC] [ИдДокумента], ... FROM DT15 |
|||
16
dk
08.11.19
✎
16:03
|
я сразу внутри представления нолоков напихал
а то есть товарищи которые будут пользоваться представлениями, но про нолок забывать |
|||
17
trad
08.11.19
✎
16:52
|
(16) а если вдруг понадобится чисто почитать?
|
|||
18
zenon46
08.11.19
✎
17:47
|
(14) ха ха, 2000-й скуль у мну
|
|||
19
Ёпрст
08.11.19
✎
18:10
|
(18) тогда делай по-старинке
|
|||
20
zenon46
11.11.19
✎
09:32
|
Появилась необходимость, в результат выполнения запроса добавить и номенклатуру из TempTable, не особо получается ругается на синтаксис ")" а вот почему не понятно, вроде все обернуто нормально в скобки.
|SELECT |Номенклатура [Номенклатура $Справочник.Номенклатура], |sum(КолПоступ) |FROM |( |SELECT | $ДокументСтроки.ПоступлениеТМЦ_Склад.Номенклатура [Номенклатура], | count(distinct Док.IDDOC)AS КолПоступ |FROM | _1SJourn Жур |INNER JOIN | $ДокументСтроки.ПоступлениеТМЦ_Склад AS Док ON Док.IDDoc = Жур.IDDoc |WHERE | Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND | ($ДокументСтроки.ПоступлениеТМЦ_Склад.Номенклатура IN (SELECT Val FROM #TempTable)) |GROUP BY $Док.Номенклатура |union all |select | val, | 0 |from | #TempTable |) |GROUP BY Номенклатура |
|||
21
palpetrovich
11.11.19
✎
12:07
|
(20) |GROUP BY $Док.Номенклатура во вложенном наверное лишняя
|
|||
22
zenon46
11.11.19
✎
12:35
|
(21) ды уже убирал, ошибка один фиг остается "Неправильный синтаксис около конструкции ")"."
|
|||
23
ДенисЧ
11.11.19
✎
12:37
|
|from
| #TempTable |) AS t1 |GROUP BY Номенклатура |
|||
24
zenon46
11.11.19
✎
12:51
|
(23) Благодартсвую. Работает.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |