|
v7: "Все" в прямом запросе | ☑ | ||
---|---|---|---|---|
0
Pr0gLamer
06.11.12
✎
11:52
|
Доброе утро!
Подскажите пожалуйста,как сделать аналог "все" или "все вошедшие в запросе" в прямом запросе? Я пишу вот так(хочу получить "все"): ТекстЗапроса = " |SELECT | Спр.ID [Товар $Справочник.Номенклатура], | SUM($Рег.ОстатокТовара) as Количество |FROM | $Справочник.Номенклатура As Спр |LEFT JOIN | $РегистрИтоги.ОстаткиТоваров as Рег |ON | $Рег.Товар = Спр.ID |WHERE | Рег.Period = Convert(DateTime,'"+ стрдатыТА +"',112) AND | Спр.ID IN (SELECT Val FROM #ВыбТовар) AND | $Рег.Фирма = :ВыбФирма |GROUP BY Спр.ID"; Выдаёт только товары,у которых есть итоги по регистру! |
|||
1
yuch
06.11.12
✎
11:56
|
Делай через Full join
|
|||
2
Pr0gLamer
06.11.12
✎
11:57
|
делал,тот же результат
|
|||
3
OFF
06.11.12
✎
11:57
|
LEFT, RIGHT, FULL ,CROSS JOIN ........
|
|||
4
Mikeware
06.11.12
✎
11:58
|
(2) врешь, похоже...
|
|||
5
Pr0gLamer
06.11.12
✎
11:59
|
"FULL JOIN" лепить вместо "LEFT JOIN" ?
|
|||
6
yuch
06.11.12
✎
12:00
|
У тебя там в запросе каша в условиях.
Но в целом должно быть FULL JOIN. |
|||
7
hunter76
06.11.12
✎
12:00
|
(0) может надо $регистрИтогиОбороты ?
|
|||
8
hunter76
06.11.12
✎
12:01
|
+(7) точнее $РегистрОстаткиОбороты
|
|||
9
Pr0gLamer
06.11.12
✎
12:03
|
мне нужно получить все остатки в т.ч. нулевые,обороты мне не нужны
ТекстЗапроса = " |SELECT | Спр.ID [Товар $Справочник.Номенклатура], | SUM($Рег.ОстатокТовара) as Количество |FROM | $Справочник.Номенклатура As Спр |FULL JOIN | $РегистрИтоги.ОстаткиТоваров as Рег |ON | $Рег.Товар = Спр.ID |WHERE | Рег.Period = Convert(DateTime,'"+ стрдатыТА +"',112) AND | $Рег.Товар IN (SELECT Val FROM #ВыбТовар) AND | $Рег.Фирма = :ВыбФирма |GROUP BY Спр.ID"; только итоги... |
|||
10
ADirks
06.11.12
✎
12:03
|
($Рег.Фирма Is Null OR $Рег.Фирма = :ВыбФирма)
|
|||
11
ADirks
06.11.12
✎
12:04
|
ну и сразу уж
SUM(IsNull($Рег.ОстатокТовара, 0)) |
|||
12
viktor_vv
06.11.12
✎
12:05
|
(9) Ты в Where запихнул условия по итогам, они накладываются на результирующую таблицу поле соединения, либо перенеси эти условия в "on", либо используй виртуальную таблицу остатков.
|
|||
13
yuch
06.11.12
✎
12:05
|
ТекстЗапроса = "
|SELECT | Спр.ID [Товар $Справочник.Номенклатура], | SUM($Рег.ОстатокТовара) as Количество |FROM | $Справочник.Номенклатура As Спр |LEFT JOIN | $РегистрИтоги.ОстаткиТоваров(,Товар IN (SELECT Val FROM #ВыбТовар) AND Фирма = :ВыбФирма) as Рег |ON | Спр.ID = $Рег.Товар |WHERE | Рег.Period = Convert(DateTime,'"+ стрдатыТА)"; |
|||
14
viktor_vv
06.11.12
✎
12:06
|
*после соединения.
|
|||
15
Pr0gLamer
06.11.12
✎
12:06
|
точно.спасибо
|
|||
16
Ёпрст
06.11.12
✎
12:09
|
(13) это не верно
|
|||
17
yuch
06.11.12
✎
12:09
|
(16) Что именно?
|
|||
18
ADirks
06.11.12
✎
12:13
|
А лучше бы вот так сказать.
|FROM | $Справочник.Номенклатура As Спр | LEFT JOIN $РегистрИтоги.ОстаткиТоваров as Рег ON | $Рег.Товар = Спр.ID | AND Рег.Period = Convert(DateTime,'"+ стрдатыТА +"',112) | AND $Рег.Фирма = :ВыбФирма |WHERE | Спр.ID IN (SELECT Val FROM #ВыбТовар) AND Т.е. все условия на связываемую таблицу указать в ON, а не в финальном WHERE. Результат один, но так понятнее. |
|||
19
viktor_vv
06.11.12
✎
12:13
|
(17) У тебя тоже получился inner join .
|
|||
20
Ёпрст
06.11.12
✎
12:14
|
(18) тоже не верно, ну да ладно
|
|||
21
Ёпрст
06.11.12
✎
12:14
|
(17) условие на период в where
|
|||
22
yuch
06.11.12
✎
12:15
|
(19) Если ты про Where, то согласен. Должно быть в условии виртуальной таблицы или соединении.
|
|||
23
yuch
06.11.12
✎
12:16
|
(21) Спешил, не вникал. Главное показал суть, как мне кажется.
|
|||
24
Pr0gLamer
06.11.12
✎
12:18
|
|SELECT
| Спр.ID [Товар $Справочник.Номенклатура], | SUM($Рег.ОстатокТовара) as Количество |FROM | $Справочник.Номенклатура As Спр |FULL JOIN | $РегистрИтоги.ОстаткиТоваров as Рег |ON | $Рег.Товар = Спр.ID |AND | Рег.Period = Convert(DateTime,'"+ стрдатыТА +"',112) |AND | $Рег.Фирма = :ВыбФирма |WHERE | Спр.ID IN (SELECT Val FROM #ВыбТовар) |GROUP BY Спр.ID"; сделал,полкучилось,ошибку уяснил.Скажитен пожалуйста,а как организовать "Все вошедшие в зпрос" |
|||
25
yuch
06.11.12
✎
12:19
|
Если ламер, зачем бежишь впереди паравоза?
|
|||
26
Pr0gLamer
06.11.12
✎
12:20
|
я как раз постепенно - от менее сложного к более
|
|||
27
Ёпрст
06.11.12
✎
12:20
|
(24)в данном случае (при запросе на та) - всё тоже самое, только без выборки справочника
|
|||
28
yuch
06.11.12
✎
12:21
|
(24) Отбор необходимо производить в виртуальной таблице остатков.
В твоем случае лучше делать левое соединение где справочник номенклатуры основная таблица. |
|||
29
yuch
06.11.12
✎
12:21
|
Где то так.
|
|||
30
yuch
06.11.12
✎
12:22
|
ТекстЗапроса = "
|SELECT | Спр.ID [Товар $Справочник.Номенклатура], | SUM($Рег.ОстатокТовара) as Количество |FROM | $Справочник.Номенклатура As Спр |LEFT JOIN | $РегистрИтоги.ОстаткиТоваров(Convert(DateTime,'"+ стрдатыТА),Товар IN (SELECT Val FROM #ВыбТовар) AND Фирма = :ВыбФирма) as Рег |ON | Спр.ID = $Рег.Товар" Все условия по отобору остатков делаем в виртуальной таблице. Соединение делаем только по ИД |
|||
31
Pr0gLamer
06.11.12
✎
12:26
|
(27) не совсем понял (
|
|||
32
Pr0gLamer
06.11.12
✎
12:27
|
(30) разве так получается не "Все",
|
|||
33
yuch
06.11.12
✎
12:28
|
(32) Я так понял тебе нужно вся номенклатура?
|
|||
34
Ёпрст
06.11.12
✎
12:30
|
(31) из своего запроса выкинь from справочник, оставь только селект регистритоги и гроупбай - получишь "все вошедшие в запрос.."
|
|||
35
Pr0gLamer
06.11.12
✎
12:32
|
Всем спасибо,вопрос решён
|
|||
36
Pr0gLamer
06.11.12
✎
13:01
|
а сделать так,чтобы первая группировка была "все"(Товар),а вторая (Склады)"Все вошедшие в запрос" возможно?
|
|||
37
Ёпрст
06.11.12
✎
13:02
|
да
|
|||
38
Pr0gLamer
06.11.12
✎
13:07
|
(37) можно подсказоньку?
|
|||
39
Ёпрст
06.11.12
✎
13:21
|
(38)
select таб.товар as [Товар $Справочник.нужныйвид] ,таб.склад as [Склад $Справочник.Склады] sum(Таб.Остаток) from ( select Спр.id Товар ,Рег.Склад Склад ,РегОст.ОстатокКоличество Остаток from $Справочник.Номенклатура Спр left join $РегистрИтоги.ОстаткиТоваров(,,Товар IN (SELECT Val FROM #ВыбТовар AND Фирма = :ВыбФирма,(Склад,Товар),(Количество)) as РегОст cross join $РегистрИтоги.ОстаткиТоваров(,,Товар IN (SELECT Val FROM #ВыбТовар AND Фирма = :ВыбФирма,(Склад,Товар),(Количество)) as Рег )as Таб group by таб.товар,таб.склад |
|||
40
Ёпрст
06.11.12
✎
13:22
|
зы
--,РегОст.ОстатокКоличество Остаток ,isnull(РегОст.ОстатокКоличество,0) Остаток |
|||
41
Ёпрст
06.11.12
✎
13:23
|
+
left join $РегистрИтоги.ОстаткиТоваров(,,Товар IN (SELECT Val FROM #ВыбТовар AND Фирма = :ВыбФирма,(Склад,Товар),(Количество)) as РегОст on РегОст .Товар = Спр.id |
|||
42
Ёпрст
06.11.12
✎
13:24
|
хотя не.. так не совсем верно
|
|||
43
Pr0gLamer
06.11.12
✎
13:27
|
мне в принципе даже "все","все"подойдёт,на сайте потом поправят
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |