powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос
10 сообщений из 10, страница 1 из 1
Запрос
    #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
Запрос
    #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
Запрос
    #40094105
Oleg_SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
plktre,

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



какая версия сервера?
...
Рейтинг: 0 / 0
Запрос
    #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
Запрос
    #40094134
Oleg_SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ролг Хупин
plktre
Oleg_SQL, что-то не получается по вашему примеру сделать(



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


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



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


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