Как сделать выбор, который отображает 2 результата на основе 2 различных где - TOAD - PullRequest
1 голос
/ 19 сентября 2019

У меня есть эти 2 запроса, они оба приносят информацию из одной и той же таблицы, но с разным условием WHERE. Как я могу выполнить это только в одном запросе, который дает мне результат в виде таблицы из 2 столбцов один столбец со значением запроса один и второйстолбец со значением запроса 2.

QUERY 1

SELECT COUNT(*) AS FirstColumn 

FROM MyTable

WHERE ThisValue !=1150 and Date = today-1;

QUERY 2

SELECT COUNT(*) AS SecondColumn 

FROM MyTable

WHERE ThisValue = 1130 AND
((Station_Date = today-1 AND Station_Time > 120000)
or (Station_Date = today AND Station_Time <= 120000));

Ответы [ 2 ]

2 голосов
/ 19 сентября 2019

Вы можете сделать условные суммы:

SELECT 
    SUM(CASE
        WHEN ThisValue !=1150 and Date = today-1 
        THEN 1 
        ELSE 0 
    END) AS FirstColumn,
    SUM(CASE 
        WHEN ThisValue = 1130 AND (
           (Station_Date = today-1 AND Station_Time > 120000)
           OR (Station_Date = today AND Station_Time <= 120000)
        ) 
        THEN 1 
        ELSE 0 
    END) AS SecondColumn
FROM MyTable
0 голосов
/ 19 сентября 2019

Я бы предложил использовать те же условия в предложении WHERE с оператором OR, чтобы избежать сканирования полных данных таблицы следующим образом:

SELECT
    SUM(CASE
        WHEN THISVALUE != 1150
             AND DATE = TODAY - 1 THEN 1
        ELSE 0
    END) AS FIRSTCOLUMN,
    SUM(CASE
        WHEN THISVALUE = 1130
             AND((STATION_DATE = TODAY - 1
                  AND STATION_TIME > 120000)
                 OR(STATION_DATE = TODAY
                    AND STATION_TIME <= 120000)) THEN 1
        ELSE 0
    END) AS SECONDCOLUMN
FROM
    MYTABLE
WHERE
    ( THISVALUE != 1150
      AND DATE = TODAY - 1 ) -- FIRST CONDITION
    OR ( THISVALUE = 1130 -- SECOND CONDITION TILL END 
         AND ( ( STATION_DATE = TODAY - 1
                 AND STATION_TIME > 120000 )
               OR ( STATION_DATE = TODAY
                    AND STATION_TIME <= 120000 ) ) )

Cheers !!

...