Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос / 10 сообщений из 10, страница 1 из 1
31.08.2021, 15:41
    #40094100
plktre
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос
Имеется следующий запрос
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
SELECT
            A.ACCOUNT_NUMBER,
            ACS.ACCOUNT_ID,
            ACS.ACCOUNTSERVICE_ID,
            CA.CONTRAGENT_NAME,
            S.SERVICE_NAME,
            TO_CHAR(SE.SERVICEENTRY_DEBT,'FM9999990D90', 'NLS_NUMERIC_CHARACTERS = '',.''') AS SERVICEENTRY_DEBT,
            TO_CHAR(SE.SERVICEENTRY_DEBTPAID,'FM9999990D90', 'NLS_NUMERIC_CHARACTERS = '',.''') AS SERVICEENTRY_DEBTPAID,
            (TO_CHAR(SE.SERVICEENTRY_VOLUME,'FM9999990D90', 'NLS_NUMERIC_CHARACTERS = '',.''') || ' ' || SE.SERVICEENTRY_EDIZM) SERVICEENTRY_VOLUME,
            TO_CHAR(SE.SERVICEENTRY_ADDITSUM,'FM9999990D90', 'NLS_NUMERIC_CHARACTERS = '',.''') AS SERVICEENTRY_ADDITSUM,
            TO_CHAR(SE.SERVICEENTRY_PAYABLE,'FM9999990D90', 'NLS_NUMERIC_CHARACTERS = '',.''')  AS SERVICEENTRY_PAYABLE,
            SE.ACCOUNTSERVICE_ID,
            SE.SERVICEENTRY_MONTH,
            SE.SERVICEENTRY_YEAR,
            TO_CHAR(SE.SERVICEENTRY_TARIF,'FM9999990D90', 'NLS_NUMERIC_CHARACTERS = '',.''')AS TARIF,
            SE.SERVICEENTRY_EDIZM,


            CASE
              WHEN A.workgroup_id IN (1,4,5,6) THEN 0
              WHEN A.workgroup_id IN (2)
                AND S.service_code IN ('4202','4203','4204')
                AND EXISTS(
                  select 1
                  from accountservice acs1
                  inner join v_serviceentrycurr se1 on se1.accountservice_id = acs1.accountservice_id
                  left outer join service s1 on s1.service_id = acs1.service_id
                  where acs1.account_id = acs.account_id
                    and acs1.contragent_id = acs.contragent_id
                    and acs1.owner_id = acs.owner_id
                    and acs1.provider_id = acs.provider_id
                    and s1.service_code in ('100','200')
                )
                THEN 0
              ELSE 1
            END payavailable

      FROM v_serviceentrycurr SE
      INNER JOIN accountservice ACS ON ACS.accountservice_id=SE.accountservice_id
      INNER JOIN proguseraccount PA ON PA.account_id=ACS.account_id
        AND PA.proguser_id=:user_id
      LEFT OUTER JOIN CONTRAGENT CA ON CA.CONTRAGENT_ID = ACS.CONTRAGENT_ID
      LEFT OUTER JOIN SERVICE S ON S.SERVICE_ID = ACS.SERVICE_ID
      LEFT OUTER JOIN ACCOUNT A ON A.ACCOUNT_ID = ACS.ACCOUNT_ID
      WHERE SE.SERVICEENTRY_ID = :acs



Необходимо, чтобы при workgroup_id IN (1,4,5,6) было LEFT OUTER JOIN CONTRAGENT CA ON CA.CONTRAGENT_ID = ACS.PROVIDER_ID, а если workgroup_id IN (2), то LEFT OUTER JOIN CONTRAGENT CA ON CA.CONTRAGENT_ID = ACS.CONTRAGENT_ID
...
Рейтинг: 0 / 0
31.08.2021, 15:50
    #40094104
uaggster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос
1. Судя по стилю, это Оракул.
2. >Необходимо, чтобы при workgroup_id IN (1,4,5,6) было LEFT OUTER JOIN CONTRAGENT CA ON CA.CONTRAGENT_ID = ACS.PROVIDER_ID, а если workgroup_id IN (2), то LEFT OUTER JOIN CONTRAGENT CA ON CA.CONTRAGENT_ID = ACS.CONTRAGENT_ID
Сделайте 2 запроса, первый с workgroup_id IN (1,4,5,6) и LEFT OUTER JOIN CONTRAGENT CA ON CA.CONTRAGENT_ID = ACS.PROVIDER_ID и второй с workgroup_id IN (2) и LEFT OUTER JOIN CONTRAGENT CA ON CA.CONTRAGENT_ID = ACS.CONTRAGENT_ID
и соедините их вертикально через union или union all (по смыслу смотрите сами).
...
Рейтинг: 0 / 0
31.08.2021, 15:50
    #40094105
Oleg_SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос
plktre,

на днях подобное было: Помогите решить задачу на transact sql.
...
Рейтинг: 0 / 0
31.08.2021, 16:49
    #40094126
plktre
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос
Oleg_SQL, что-то не получается по вашему примеру сделать(
...
Рейтинг: 0 / 0
31.08.2021, 16:58
    #40094129
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос
plktre
Oleg_SQL, что-то не получается по вашему примеру сделать(



какая версия сервера?
...
Рейтинг: 0 / 0
31.08.2021, 17:05
    #40094133
Oleg_SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос
plktre
Oleg_SQL, что-то не получается по вашему примеру сделать(



разве не так?

Код: sql
1.
2.
3.
LEFT OUTER JOIN CONTRAGENT CA ON (CA.CONTRAGENT_ID = ACS.PROVIDER_ID AND workgroup_id IN (1,4,5,6))
                                                    OR  
                                                    (CA.CONTRAGENT_ID = ACS.CONTRAGENT_ID  AND workgroup_id IN (2))




хотя, если данных очень много, то возможно, вариант с UNION [ALL] может быть эффективнее.
...
Рейтинг: 0 / 0
31.08.2021, 17:10
    #40094134
Oleg_SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос
Ролг Хупин
plktre
Oleg_SQL, что-то не получается по вашему примеру сделать(



какая версия сервера?


судя по TO_CHAR - не наша )))
...
Рейтинг: 0 / 0
31.08.2021, 17:15
    #40094135
plktre
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос
Oleg_SQL, да, данных достаточно много, писала как вы выше указали - не работает.
Сделала все же через 2 запроса, думала можно будет как-то сделать его меньше, но увы. Благодарю за помощь!
...
Рейтинг: 0 / 0
31.08.2021, 17:21
    #40094138
Oleg_SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос
plktre
Oleg_SQL, да, данных достаточно много, писала как вы выше указали - не работает.
Сделала все же через 2 запроса, думала можно будет как-то сделать его меньше, но увы. Благодарю за помощь!



Не работает - ошибка? Вам точно LEFT join нужен?
...
Рейтинг: 0 / 0
31.08.2021, 17:23
    #40094139
plktre
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос
Oleg_SQL, все вышло, не указала у workgroup_id название таблицы
Спасибо еще раз
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]