我有这个查询,我从三个不同的表中计算值,并从每个表中获取两列,日期和计数。获得3个记录,前12个为第二个,12个为第三个。最后,我从所有这些表中的计数列进行了一些计算,其中第二列的日期是找到匹配项。
例如,如果第一个表列的日期与第二个和第三个列匹配,我将添加所有这些值并获得它的百分比...虽然我已经为它创建了一个查询...但是它得到了正确的数据.. < / p>
我需要知道如何在日期的基础上执行此表的计算..我正在使用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
HTH
答案 0 :(得分:0)
您获取过去100天的所有anns记录并交叉加入平底锅。这个交叉连接是否需要? (最好使用ANSI连接语法来避免意外的交叉连接。)
您可以找到所有a,b和c中的所有日期并相应地加入。
您与anns-pans交叉连接交叉加入a-b-c联接。再说一次:你真的想在这里交叉加入吗?你按照anns.date进行分组(顺便说一下,日期是一个坏名称,因为它是一个关键字),但anns.date与检索到的记录有什么关系?
从语法上讲,你的陈述看起来是正确的,但我不信任你的联接: - )