2014-12-24 6 views
0
SELECT COUNT(DISTINCT SEC.ERROR_GROUP_ID), 
    COUNT(DISTINCT SEC_DET.ERROR_GROUP_ID), 
    COUNT(DISTINCT MB.ERROR_GROUP_ID), 
    COUNT(DISTINCT OD.ERROR_GROUP_ID), 
    (SELECT COUNT (DISTINCT SEC_SCH.ERROR_GROUP_ID) 
    FROM SCHEMA.SECURITY SEC 
    LEFT OUTER JOIN SCHEMA.SECURITY_SCHEDULE SEC_SCH 
    ON SEC.MSD_SECURITY_ID  =SEC_SCH.MSD_SECURITY_ID 
    WHERE SEC.MSD_SECURITY_ID IN 
     (SELECT DISTINCT main.MSD_SECURITY_ID 
     FROM SCHEMA2.Positions main 
      WHERE main.QUANTITY != 0 
      AND systimestamp >= main.eff_from_dt 
      AND main.eff_to_dt > systimestamp 
      AND systimestamp >= main.asrt_from_dt 
      AND main.asrt_to_dt > systimestamp 
    )) 

FROM SCHEMA.SECURITY SEC 
JOIN SCHEMA.SECURITY_DETAIL SEC_DET 
ON SEC.MSD_SECURITY_ID = SEC_DET.MSD_SECURITY_ID 
LEFT OUTER JOIN SCHEMA.MUNI_BOND MB 
ON SEC.MSD_SECURITY_ID=MB.MSD_SECURITY_ID 
LEFT OUTER JOIN SCHEMA.OPTION_DETAIL OD 
ON SEC.MSD_SECURITY_ID =OD.MSD_SECURITY_ID 
WHERE SEC.MSD_SECURITY_ID IN 
    (SELECT DISTINCT main.MSD_SECURITY_ID 
    FROM SCHEMA2.Positions main 
    WHERE main.QUANTITY != 0 
    AND systimestamp >= main.eff_from_dt 
    AND main.eff_to_dt > systimestamp 
    AND systimestamp >= main.asrt_from_dt 
    AND main.asrt_to_dt > systimestamp 
) ; 

Ошибка ORA-00936: отсутствует выражение 00936. 00000 - "отсутствует выражение" * Причина:
* Действие: Ошибка в строке: 365 Колонка: 3Проблема с подзапросом в Oracle исправила запрос?

вложенной синтаксис запроса должен б исправлено для этого, чтобы работать, где я застрял? ».

+0

Я исправил запрос, любезно взглянуть на то же самое, и это не так много результатов, мне нужно получить синтаксис правильно для запроса qbove –

ответ

1

Это частичный ответ - я не совсем понимаю ваш код. Я думаю, что у него есть проблемы.,

Примечание: ** означает полужирный - я испортил форматирование **, не является частью этого SQL.

Вам нужно сгруппировать что-нибудь. В этом случае:

(SELECT DISTINCT (SEC_SCH.ERROR_GROUP_ID) 
    FROM SCHEMA.SECURITY SEC 
    LEFT OUTER JOIN SCHEMA.SECURITY_SCHEDULE SEC_SCH 
    ON SEC.MSD_SECURITY_ID  =SEC_SCH.MSD_SECURITY_ID 
    WHERE SEC.MSD_SECURITY_ID IN 
     (SELECT DISTINCT main.MSD_SECURITY_ID 
     FROM SCHEMA2.Positions main 
      WHERE main.QUANTITY != 0 
      AND systimestamp >= main.eff_from_dt 
      AND main.eff_to_dt > systimestamp 
      AND systimestamp >= main.asrt_from_dt 
      AND main.asrt_to_dt > systimestamp 
    )) **foo** 

    FROM SCHEMA.SECURITY SEC 
    JOIN SCHEMA.SECURITY_DETAIL SEC_DET 
    ON SEC.MSD_SECURITY_ID = SEC_DET.MSD_SECURITY_ID 
    LEFT OUTER JOIN SCHEMA.MUNI_BOND MB 
    ON SEC.MSD_SECURITY_ID=MB.MSD_SECURITY_ID 
    LEFT OUTER JOIN SCHEMA.OPTION_DETAIL OD 
    ON SEC.MSD_SECURITY_ID =OD.MSD_SECURITY_ID 
    WHERE SEC.MSD_SECURITY_ID IN 
     (SELECT DISTINCT main.MSD_SECURITY_ID 
     FROM SCHEMA2.Positions main 
     WHERE main.QUANTITY != 0 
     AND systimestamp >= main.eff_from_dt 
     AND main.eff_to_dt > systimestamp 
     AND systimestamp >= main.asrt_from_dt 
     AND main.asrt_to_dt > systimestamp 
    ) 
    **group by foo** ; 
0

Ваш общий запрос представляет собой совокупность запросов без group by, так что можно было бы ожидать, чтобы вернуть одну строку. У вас есть подзапрос в select, который может возвращать несколько строк - я подозреваю, что проблема связана с этой структурой.

Я предлагаю вам изменить функцию distinct на функцию агрегации. Но что? COUNT(DISTINCT SEC_SCH.ERROR_GROUP_ID))? MAX (SEC_SCH.ERROR_GROUP_ID)) ? LISTAGG(SEC_SCH.ERROR_GROUP_ID, ',') WITHIN GROUP (ORDER BY SEC_SCH.ERROR_GROUP_ID))? Я не знаю. Непонятно, что вы хотите для третьего столбца.

Весь ваш запрос выглядит подозрительным. Так много выражений count(disintct) часто означает, что вы присоединяетесь к независимым измерениям - создаете декартовую продукцию. Трудно сказать, если это проблема, потому что без выборочных данных и желаемых результатов ваш вопрос фактически не говорит о том, чего вы хотите достичь.

+0

Я ошибся, я исправил исходное сообщение, чтобы очистить его, я хотите подсчеты для нескольких таблиц на основе ЛЕВЫХ СОЕДИНЕНИЙ, –

Смежные вопросы