FreeSql icon indicating copy to clipboard operation
FreeSql copied to clipboard

自动分表求和生成了多个结构,没有把结果相加。

Open sukney opened this issue 2 years ago • 8 comments

版本 3.2.650-preview20220515 oracle 11g 数据库 代码 var q = _workSaleRepository.Select .From<GOODSDOC, BUSINESSDOC>((a, b, c) => a.LeftJoin(z => z.GOODSID == b.GOODSID && z.ENTID == b.ENTID) .LeftJoin(z => z.CLIENTID == c.BusinessId && z.ENTID == c.EntId)) .Where((x, a, b) => x.DATETIME >= beg && x.DATETIME < end) .ToAggregate((x, b, c) => new { total = x.Count(), totalNum = x.Sum(x.Key.NUM), totalAmount = x.Sum(x.Key.TAXAMOUNT), }); 生成的语句如下

SELECT * from (SELECT count(1) as1, sum(a."NUM") as2, sum(a."TAXAMOUNT") as3 FROM "WORK_SA_202106" a LEFT JOIN "VIW_GOODSDOC" b ON a."GOODSID" = b."GOODSID" AND a."ENTID" = b."ENTID" LEFT JOIN "VIW_BUSINESSDOC" c ON a."CLIENTID" = c."BUSINESSID" AND a."ENTID" = c."ENTID" WHERE (a."DATETIME" >= to_timestamp('2021-03-01 00:00:00.000000','YYYY-MM-DD HH24:MI:SS.FF6') AND a."DATETIME" < to_timestamp('2021-06-06 00:00:00.000000','YYYY-MM-DD HH24:MI:SS.FF6'))) ftb

UNION ALL

SELECT * from (SELECT count(1) as1, sum(a."NUM") as2, sum(a."TAXAMOUNT") as3 FROM "WORK_SA_202105" a LEFT JOIN "VIW_GOODSDOC" b ON a."GOODSID" = b."GOODSID" AND a."ENTID" = b."ENTID" LEFT JOIN "VIW_BUSINESSDOC" c ON a."CLIENTID" = c."BUSINESSID" AND a."ENTID" = c."ENTID" WHERE (a."DATETIME" >= to_timestamp('2021-03-01 00:00:00.000000','YYYY-MM-DD HH24:MI:SS.FF6') AND a."DATETIME" < to_timestamp('2021-06-06 00:00:00.000000','YYYY-MM-DD HH24:MI:SS.FF6'))) ftb

UNION ALL

SELECT * from (SELECT count(1) as1, sum(a."NUM") as2, sum(a."TAXAMOUNT") as3 FROM "WORK_SA_202104" a LEFT JOIN "VIW_GOODSDOC" b ON a."GOODSID" = b."GOODSID" AND a."ENTID" = b."ENTID" LEFT JOIN "VIW_BUSINESSDOC" c ON a."CLIENTID" = c."BUSINESSID" AND a."ENTID" = c."ENTID" WHERE (a."DATETIME" >= to_timestamp('2021-03-01 00:00:00.000000','YYYY-MM-DD HH24:MI:SS.FF6') AND a."DATETIME" < to_timestamp('2021-06-06 00:00:00.000000','YYYY-MM-DD HH24:MI:SS.FF6'))) ftb

UNION ALL

SELECT * from (SELECT count(1) as1, sum(a."NUM") as2, sum(a."TAXAMOUNT") as3 FROM "WORK_SA_202103" a LEFT JOIN "VIW_GOODSDOC" b ON a."GOODSID" = b."GOODSID" AND a."ENTID" = b."ENTID" LEFT JOIN "VIW_BUSINESSDOC" c ON a."CLIENTID" = c."BUSINESSID" AND a."ENTID" = c."ENTID" WHERE (a."DATETIME" >= to_timestamp('2021-03-01 00:00:00.000000','YYYY-MM-DD HH24:MI:SS.FF6') AND a."DATETIME" < to_timestamp('2021-06-06 00:00:00.000000','YYYY-MM-DD HH24:MI:SS.FF6'))) ftb 下图是plsql语句的结果,变成了四条记录 image

sukney avatar May 23 '22 15:05 sukney

目前自动分表,多表查询,聚合查询是测试盲区。

主要针对单表,特定的查询有效。

2881099 avatar May 23 '22 16:05 2881099

这个有没好的办法解决下

sukney avatar May 24 '22 00:05 sukney

我尝试解决一下,有结果了回复

2881099 avatar May 24 '22 05:05 2881099

ToAggregate 新版本会翻译成这样执行:

SELECT  sum(ftba."click") as1, count(1) as2, avg(ftba."click") as3, min(ftba."click") as4, max(ftba."click") as5 FROM ( 
    SELECT  * from (SELECT a."click" 
    FROM "as_table_log_202204" a 
    WHERE (a."createtime" < '2022-05-01 00:00:00')) ftb
     
    UNION ALL
     
    SELECT  * from (SELECT a."click" 
    FROM "as_table_log_202203" a 
    WHERE (a."createtime" < '2022-05-01 00:00:00')) ftb
     
    UNION ALL
     
    SELECT  * from (SELECT a."click" 
    FROM "as_table_log_202202" a 
    WHERE (a."createtime" < '2022-05-01 00:00:00')) ftb
     
    UNION ALL
     
    SELECT  * from (SELECT a."click" 
    FROM "as_table_log_202201" a 
    WHERE (a."createtime" < '2022-05-01 00:00:00')) ftb
) ftba

2881099 avatar May 24 '22 05:05 2881099

帮发个版本,谢谢

sukney avatar May 24 '22 07:05 sukney

v3.2.650-preview20220526

2881099 avatar May 24 '22 07:05 2881099

nuget 搜不到 v3.2.650-preview20220526 版本。

sukney avatar May 24 '22 08:05 sukney

nuget 搜不到 v3.2.650-preview20220526 版本。

nuget 抽风,两个多小时还没成功,发布了v3.2.651

2881099 avatar May 24 '22 10:05 2881099