Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 令人惊讶地困惑(不可能)的查询_Sql_Postgresql_Jasper Reports - Fatal编程技术网

Sql 令人惊讶地困惑(不可能)的查询

Sql 令人惊讶地困惑(不可能)的查询,sql,postgresql,jasper-reports,Sql,Postgresql,Jasper Reports,我有一个问题,我不知道这是否可能 我有三张桌子。一个父表和两个子表 数据将显示在网格上。与 [account\u detail]经验性得分作为行标题 和 [account\u detail]mfin\u分数作为列标题 这样(将在一秒钟内完成99%的飞行) 因此,查询需要获得epirica_分数和mfin_分数,以确定网格上的位置(例如99%的位置) 并为键匹配的[NAEDO]startdate获取不同的值。 差不多是这样 SELECT * FROM paysoft_result WHER

我有一个问题,我不知道这是否可能

我有三张桌子。一个父表和两个子表

数据将显示在网格上。与
[account\u detail]经验性得分
作为行标题 和
[account\u detail]mfin\u分数
作为列标题

这样(将在一秒钟内完成99%的飞行)

因此,查询需要获得
epirica_分数
mfin_分数
,以确定网格上的位置(例如99%的位置)

并为键匹配的
[NAEDO]startdate
获取
不同的
值。
差不多是这样

SELECT * 
FROM paysoft_result 
WHERE result_date >= "2014-08-01" and <= "2014-09-01"
AND ( SELECT COUNT( custno ) from Paysoft_result where result = 'successful' )
AND (.. some join to get the scores from account_detail .. )
AND (.. some join to get to NAEDO..  WHERE DISTINCT(start_date))
NAEDO TBALE

customer_code name start_date 1000002828 "Abraham Mars" "2014-08-01" 1000002828 "Abraham Mars" "2014-09-03" 1000002828 "Abraham Mars" "2014-08-01" 1000002828 "Abraham Mars" "2014-07-03" 1000002222 "Andrew peter Petersen" "2014-05-23" 1000002222 "Andrew peter Petersen" "2014-08-22" 1000002222 "Andrew peter Petersen" "2014-07-23" 1000002222 "Andrew peter Petersen" "2014-07-23" 1000002222 "Andrew peter Petersen" "2014-06-23" 客户代码名称开始日期 1000002828“亚伯拉罕火星”2014-08-01 1000002828“亚伯拉罕火星”2014-09-03 1000002828“亚伯拉罕火星”2014-08-01 1000002828“亚伯拉罕火星”2014-07-03 100000 2222“安德鲁·彼得·彼得森”“2014-05-23” 100000 2222“安德鲁·彼得·彼得森”“2014-08-22” 100000 2222“安德鲁·彼得·彼得森”“2014-07-23” 100000 2222“安德鲁·彼得·彼得森”“2014-07-23” 100000 2222“安德鲁·彼得·彼得森”“2014-06-23” paysoft_结果表

account_no title surname firstname empirica_score mfin_score 1000002222 "Mr" "Petersen" "Andrew peter" 602 97 1000002828 "Mr" "Mars" "Abraham" 599 97 custno name result result_date 1000002828 "Abraham Mars" "Successful" "2014-07-05" 1000002828 "Abraham Mars" "Tracking" "2014-08-01" 1000002828 "Abraham Mars" "Successful" "2014-08-01" 1000002828 "Abraham Mars" "Tracking" "2014-09-03" 1000002828 "Abraham Mars" "Successful" "2014-09-06" 1000002222 "Andrew peter Petersen" "Successful" "2014-08-25" 1000002222 "Andrew peter Petersen" "Successful" "2014-06-25" 1000002222 "Andrew peter Petersen" "Tracking" "2014-08-22" 1000002222 "Andrew peter Petersen" "Successful" "2014-05-23" 1000002222 "Andrew peter Petersen" "Successful" "2014-07-25" 1000002222 "Andrew peter Petersen" "Tracking" "2014-07-23" 客户无姓名结果\u日期 1000002828“亚伯拉罕火星”成功“2014-07-05” 1000002828“亚伯拉罕火星”跟踪“2014-08-01” 1000002828“亚伯拉罕火星”成功“2014-08-01” 1000002828“亚伯拉罕火星”跟踪“2014-09-03” 1000002828“亚伯拉罕火星”成功“2014-09-06” 100000 2222“安德鲁·彼得·彼得森”“成功”“2014-08-25” 100000 2222“安德鲁·彼得·彼得森”“成功”“2014-06-25” 100000 2222“安德鲁·彼得·彼得森”“跟踪”“2014-08-22” 100000 2222“安德鲁·彼得·彼得森”“成功”“2014-05-23” 100000 2222“安德鲁·彼得·彼得森”“成功”“2014-07-25” 100000 2222“Andrew peter Petersen”“跟踪”“2014-07-23” Abraham有3笔付款和3笔NAEDO记录(开始日期不同)
即3/3*100=100%
他已经在网格上有了代表(尽管其比例为99%)

Andrew有4笔付款和4笔NAEDO记录(开始日期不同)
即4/4*100=100%
他应该在网格上的同一个位置

也许在后台,我可以收集所有的网格位置分数,并进行百分比计算

代表一位客户

我可以请求显示您需要的结果 如果有任何错误,请告诉我更正 对于jasper来说,如果请求正确,那么它很容易实现 祝你好运

SELECT paysoft_results.COUNT(custno),
  account_details.impirica_score,
  account_details.mfin_score ,
  naedo.start_date
FROM account_details
INNER JOIN paysoft_results pr
ON (account_details.account_no = paysoft_results.custno)
INNER JOIN naedo
ON (account_details.account_no =naedo.customer_code)
WHERE pr.result_date BETWEEN '2014/08/01' AND '2014/09/01'
AND paysoft_results.result = 'successful'

所以这应该是关于所需的查询。我从account_detail中选择帐户及其分组字符串(行和列组)。我计算每个帐户的成功paysoft结果和每个帐户的开始日期。然后我加入并聚合。然后由Jasper Reports在网格中透视和显示数据

select 
  ad.escore,
  ad.mscore,
  sum(ps.cnt) / sum(n.cnt) * 100 as percent
from 
(
  select 
    account_no,
    -- 602 becomes '595-604'
    to_char(trunc(empirica_score - 5, -1) + 5, , '9999') || '-' || to_char(trunc(empirica_score - 5, -1) + 14, '9999') as escore,
    -- 97 becomes '76-100'. Change the expression to group differently.
    to_char(((mfin_score - 1) / 25) * 25 + 1) || '-' || to_char(((mfin_score - 1) / 25) * 25 + 25) as mscore
  from account_detail
) ad
join 
(
  select custno, count(*) as cnt
  from paysoft_result 
  where result = 'Successful'
  group by custno
) ps on ps.custno = ad.account_no
join 
(
  select customer_code, count(distinct start_date) as cnt
  from naedo 
  group by customer_code
) n on n.customer_code =  = ad.account_no
group by ad.escore, ad.mscore;

哇!这是惊人的理解。我确实得到了这个错误,尽管
错误:模式“pr”不存在
不明白为什么。编辑也是为了更正一些表名。表名和字段名根据您的回答(编辑)是正确的,但它不断抱怨
错误:架构“pr”不存在
可能是
postgres
不使用
内部联接
s?pr.COUNT(custno)?那么表pr有一个成员函数COUNT?我不这么认为,而且我认为这正是dbms所抱怨的。我认为ppostgres不接受变量,所以我编辑了我的回答,尝试一下,但是:paysoft_结果表有计数函数吗?博士后甚至支持这样的教育吗?我想你想做一些完全不同的事情。总数的但是您的查询中没有GROUPBY子句……您是否可以提供3个表的示例数据,或者使用一些数据(使用postgres)设置SQLFIDLE,将url添加到问题中。数据的图像不可重用:(那么:这两个账户都位于91-115/595-604。这两个账户在8月份有两个成功的paysoft_结果。他们在8月份有三个nadeo记录。这使得2/3*100=67%可以显示。是吗?@ThorstenKettner-谢谢。我已经编辑了回答你的问题。让我们看看我是否理解正确:有一个网格,其中的单元格包含perc。)每个单元格都有一个值。Abraham和Andrew属于同一个单元格。所以它是7/7*100=100%。是吗?是的。其他客户的付款少于NAEDO记录,所以它不会总是100%像这里。但是是的,你已经做到了完美。哇,伙计,你真的很棒,你知道。非常感谢。我在查询中发现一个错误
错误:f函数to|u char(整数)不存在第12行:to|char((mfin|U分数-1)/25)*25+1)| to|c…
我使用
转换((mfin|U分数-1)/25)*25+1作为文本)|转换((mfin|U分数-1)/25)*25+25作为文本)作为mscore
,它完成了任务。