2014-01-17 2 views
0

У меня есть этот запрос, где я подсчитываю значения из трех разных таблиц и получаю два столбца, дату и количество из каждого из них. Получение 3 записей для первых 12 для второго и 12 для третьего. Наконец, я делаю небольшой расчет из этих столбцов подсчета из всех этих таблиц, где есть дата со второго столбца, и находит совпадение.подсчет подсчета по дате

Например, если дата первого столбца таблицы соответствует второму и третьему, я добавляю все эти значения и получить процент от этого ... хотя я создал для него запрос ... но он получил правильные данные.

Мне нужно знать, как я мог выполнить расчет из этой таблицы на основе даты .. Я использую Oracle DB

SELECT TRUNC(ans.date), 
    (a.count1+b.count2+c.count3)*100/count4 AS status 
FROM 
    (SELECT COUNT(pans.actual)count1, 
      TRUNC(ans.date) AS subdate 
    FROM pans, ans 
    WHERE pans.actres ='1' 
    AND TRUNC(anss.date) > sysdate-100 
    AND pans.id = anss.id 
    GROUP BY TRUNC(anss.date) 
)a, 
    (SELECT COUNT(conans.actres)count2, 
     TRUNC(anss.date) AS subdate 
    FROM conans, anss 
    WHERE conans.actres ='1' 
    AND TRUNC(anss.date) > sysdate-100 
    AND conans.id = anss.id 
    GROUP BY TRUNC(anss.date) 
)b, 
    (SELECT COUNT(anss.submitted)count3, 
      TRUNC(anss.date) AS subdate 
    FROM anss 
    WHERE submitted = 1 
    AND TRUNC(anss.date) > sysdate-100 
    GROUP BY TRUNC(anss.date) 
)c, 
    (SELECT COUNT(pans.actres) count4 
    FROM pans, anss 
    WHERE anss.date > sysdate-100 
)d, 
    anss, 
    pans 
WHERE a.subdate = b.subdate 
    AND b.subdate = c.subdate 
    AND a.subdate = c.subdate 
    AND TRUNC(anss.date) > sysdate-100 
GROUP BY TRUNC(anss.date),a.count1,b.count2,c.count3,d.count4 


count1 
------------------ 
count | date 
3  | 12/12/1928 
5  | 12/12/1998 
6  | 12/12/1995 


count2 
------------------ 
count| date 
3 | 12/12/1928 
5 | 12/12/1998 
6 | 12/12/1995 
23 | 12/12/1924 
56 | 12/12/1993 
68 | 12/12/1992 
39 | 12/12/1921 
58 | 12/12/1990 
63 | 12/12/1999 


count3 
------------------ 
count| date 
3 | 12/12/1928 
5 | 12/12/1998 
6 | 12/12/1995 
23 | 12/12/1924 
56 | 12/12/1993 
68 | 12/12/1992 
39 | 12/12/1921 
58 | 12/12/1990 
63 | 12/12/1999 


count4 
------------------ 
4500 

теперь я должен вычислить

(count1+count2+count3)*100/count4 
when count1.date=count2date=count3.date 

НТН

ответ

0

Берет весь ИНС запись за последние 100 дней и перекрестное соединение сковороды. Желательно ли это крест-соединение? (Было бы лучше, если бы вы использовали синтаксис объединения ANSI, чтобы избежать случайных кросс-соединений.)

Вы находите все даты, которые присутствуют во всех а, b и c, и присоединяются соответственно.

Вы переходите к объединению a-b-c со своим крестом anns-pan. Опять же: Вы действительно хотите пересечься здесь? Вы group by anns.date (дата - это плохое имя, так как это ключевое слово, кстати), но что делает anns.date habe делать с записями, полученными ???

Синтаксически ваше утверждение выглядит правильно, но я не доверяю вашим объединениям :-)

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