|
Прямой запрос - группировка по Case | ☑ | ||
---|---|---|---|---|
0
Mary01
29.08.15
✎
23:24
|
Как правильно сделать группировку по полю, полученному с помощью CASE? Пишу:
|SELECT |$Рег.Покупатель as [Контрагент $Справочник.Контрагенты], |CASE WHEN LEFT($Контрагенты.ЮрФизЛицо,4) = ' DP' THEN 'ЮрЛица' ELSE 'ФизЛица' END AS ВидКонтр, |$Рег.Номенклатура as [Номенклатура $Справочник.Номенклатура], |Рег.IDDoc as [Док $Документ], |Жур.IDDocDef as Док_вид, |$Рег.Количество as Кол, |$Рег.ПродСтоимость as Сум |FROM | $Регистр.Продажи as Рег |INNER JOIN _1SJOURN as Жур WITH (NOLOCK) ON Рег.IDDOC = Жур.IDDOC |INNER JOIN $Справочник.Контрагенты AS Контрагенты With (NOLOCK) ON $Рег.Покупатель = Контрагенты.ID |WHERE Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ |GROUP BY ВидКонтр, $Рег.Покупатель, $Рег.Номенклатура |"; Ошибка - Недопустимое имя столбца "ВидКонтр". Как правильно сделать? |
|||
1
igork1966
29.08.15
✎
23:26
|
(0) Ну перенеси туда case
|
|||
2
igork1966
29.08.15
✎
23:27
|
(1) +
GROUP BY CASE WHEN LEFT($Контрагенты.ЮрФизЛицо,4) = ' DP' THEN 'ЮрЛица' ELSE 'ФизЛица' END, $Рег.Покупатель, $Рег.Номенклатура |
|||
3
Попытка1С
29.08.15
✎
23:37
|
Правильнее обернуть в подзапрос.
|
|||
4
Mary01
29.08.15
✎
23:41
|
(1) (2) вначале тоже хотела так сделать, но подумала что это будет неправильно, т.к. получается, что выражение будет вычисляться дважды.
но ладно, сделала как вы написали, больше той ошибки нет. теперь ругается на другое: я не использовала в группировке IDDoc. Но мне не нужна по нему группировка, и убрать из Select его нельзя. как тогда? |
|||
5
igork1966
29.08.15
✎
23:43
|
(4) ты плохо думаешь об MS SQL
|
|||
6
igork1966
29.08.15
✎
23:45
|
(4) "теперь ругается на другое: я не использовала в группировке IDDoc"
при группировке поля не включенные в группировку могут только в агрегатах быть |
|||
7
igork1966
29.08.15
✎
23:47
|
(6) и это логично, поскольку в рамках ключа определенного GROUP BY эти поля множество (значений)
|
|||
8
igork1966
29.08.15
✎
23:51
|
(6) + если конечно ты не путаешь группировку с итогами... тогда смотри ROLLUP (http://info-comp.ru/obucheniest/444-sql-rollup-cube-grouping-sets.html)
|
|||
9
Mary01
29.08.15
✎
23:52
|
(8) да, мне нужны итоги по группировкам
|
|||
10
Mary01
30.08.15
✎
00:03
|
Сделала Рег.IDDoc with rollup - ок, но теперь то же самое с Жур.IDDocDef - я не включила его в группировку. "with rollup" написала после Жур.IDDocDef, но получилось два rollup в строке группировки - не прокатило.
попробовала из (8): (Рег.IDDoc, Жур.IDDocDef) with rollup, тоже не прокатило: ошибка "Конструкции группирования CUBE() и ROLLUP() недопустимы в текущем режиме совместимости. Они допускаются только в режиме 100 и выше" |
|||
11
Mary01
30.08.15
✎
00:04
|
(10) то есть, rollup(Рег.IDDoc, Жур.IDDocDef), конечно же
|
|||
12
Serginio1
30.08.15
✎
00:11
|
(10) У тебя какой SQL стоит?
|
|||
13
Mary01
30.08.15
✎
00:16
|
2012 или 2014 не помню точно... пока не могу посмотреть.
|
|||
14
Serginio1
30.08.15
✎
00:19
|
(13) А режим совместимости случайно не 2000
|
|||
15
Mary01
30.08.15
✎
00:20
|
(14) где это посмотреть?
|
|||
16
Serginio1
30.08.15
✎
00:22
|
||||
17
Serginio1
30.08.15
✎
00:23
|
||||
18
Mary01
30.08.15
✎
00:24
|
(16) ок, где смотреть поняла, но на сервер попасть не могу пока.
|
|||
19
Serginio1
30.08.15
✎
00:26
|
(18) Ну судя по сообщени у тебя стоит режим совместимости с 2000
|
|||
20
Mary01
30.08.15
✎
00:44
|
Проблему решила вложенным запросом. Выбрала в верхнем запросе из вложенного только нужные поля и сгруппировала по ним (с применением with rollup), к числовым полям применила агрегат sum, и в итоге наконец ПОЛУЧИЛА то, что нужно было!!!
|
|||
21
Попытка1С
30.08.15
✎
00:49
|
(20) Я тебе это писал еще (3)
|
|||
22
Mary01
30.08.15
✎
00:55
|
(21) я тогда хотела обойтись без этого, т.к. проблема была только в группировке по Case, и это получилось решить без вложенного запроса. но потом поняла, что лучше с вложенным запросом, т.к. возникла ошибка из-за того, что я группирую не по всем полям.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |