Создание двух отдельных столбцов с использованием предложения WHERE из одной главной таблицы - PullRequest
0 голосов
/ 13 июня 2019

Мне нужно вытащить два столбца (B и C) из одного столбца (A) из Таблицы_2. Эти два столбца (сценарий ниже) реализованы в большем запросе. Когда я запускаю запрос только с одним из столбцов, например, только с B, запрос выполняется хорошо и занимает всего несколько секунд. Однако, когда я одновременно выполняю запросы B и C в запросе, запрос просто продолжает выполняться и не заканчивается. Я попытался дать двум столбцам разные псевдонимы, чтобы увидеть, решит ли это проблему, но я не смог выяснить, почему запрос не выполняется с присутствием как B, так и C. Два столбца почти одинаковы, кроме предложения WHERE.

У меня есть только одно объединение в сценарии для столбцов B и C, аналогично: FROM Table_1 T1, Table_2 T2 WHERE T2.ENT_REF = T1.ENT_REF (+)

Есть идеи?

  ( SELECT  
      SUM(T2.A) as prem
      FROM Table_2 T2 
      WHERE T2.ENT_REF = T1.ENT_REF
      AND UPPER(T2.PER) = 'HURR' 
      AND UPPER(T2.ENT_TYPE) = 'POL'
      AND T2.Cov NOT IN ('OUTPROP','COV')
  ) B,


    (SELECT  
      SUM(T2.A) as prem
      FROM Table_2 T2 
      WHERE T2.ENT_REFE = T1.ENT_REF 
      AND UPPER(T2.PER) IN ('I', 'II', 'II') 
      AND UPPER(T2.ENT_TYPE) = 'POL'
      AND T2.Cov NOT IN ('OUTPROP','COV')
  ) C

1 Ответ

1 голос
/ 13 июня 2019

Вам нужна фиктивная таблица в PL / SQL. (Из двойного)

Вам также необходимо присоединиться к столу (таблица_1).

Пожалуйста, убедитесь, что каждый запрос может вернуть ожидаемое значение.

В ваших исходных запросах вы указали 'T2.ENT_REF = T1.ENT_REF', но не добавили table_1. Это приведет к синтаксической ошибке.

Пожалуйста, попробуйте это:

SELECT
  (SELECT  
      SUM(T2.A) as prem
      FROM Table_2 T2, Table_2 T1
      WHERE T2.ENT_REF = T1.ENT_REF
      AND UPPER(T2.PER) = 'HURR' 
      AND UPPER(T2.ENT_TYPE) = 'POL'
      AND T2.Cov NOT IN ('OUTPROP','COV')
  ) as B,
  (SELECT  
      SUM(T2.A) as prem
      FROM Table_2 T2, Table_2 T1
      WHERE T2.ENT_REFE = T1.ENT_REF 
      AND UPPER(T2.PER) IN ('I', 'II', 'II') 
      AND UPPER(T2.ENT_TYPE) = 'POL'
      AND T2.Cov NOT IN ('OUTPROP','COV')
  ) as C
FROM DUAL

Обновление:

Вы можете использовать [concat]

SELECT
CONCAT(
  (SELECT  
      SUM(T2.A) as prem
      FROM Table_2 T2, Table_2 T1
      WHERE T2.ENT_REF = T1.ENT_REF
      AND UPPER(T2.PER) = 'HURR' 
      AND UPPER(T2.ENT_TYPE) = 'POL'
      AND T2.Cov NOT IN ('OUTPROP','COV')
  ) ,
  (SELECT  
      SUM(T2.A) as prem
      FROM Table_2 T2, Table_2 T1
      WHERE T2.ENT_REFE = T1.ENT_REF 
      AND UPPER(T2.PER) IN ('I', 'II', 'II') 
      AND UPPER(T2.ENT_TYPE) = 'POL'
      AND T2.Cov NOT IN ('OUTPROP','COV')
  ) 
) AS BandC
FROM DUAL

Обновление 2:

SELECT
(
  (SELECT  
      SUM(T2.A) as prem
      FROM Table_2 T2, Table_2 T1
      WHERE T2.ENT_REF = T1.ENT_REF
      AND UPPER(T2.PER) = 'HURR' 
      AND UPPER(T2.ENT_TYPE) = 'POL'
      AND T2.Cov NOT IN ('OUTPROP','COV')
  ) +
  (SELECT  
      SUM(T2.A) as prem
      FROM Table_2 T2, Table_2 T1
      WHERE T2.ENT_REFE = T1.ENT_REF 
      AND UPPER(T2.PER) IN ('I', 'II', 'II') 
      AND UPPER(T2.ENT_TYPE) = 'POL'
      AND T2.Cov NOT IN ('OUTPROP','COV')
  ) 
) AS BandC
FROM DUAL
...