c# - 14 列报表的 SQL 查询超时(14 天)
问题描述
if (myMandays == 1)
Filter1 = " count(empno)";
else
Filter1 = " sum(mdays)";
switch (myKcodeInt)
{
case 1:
Filter2 = "";
break;
case 2:
Filter2 = " and a.khead = @myKcodeStr";
break;
case 3:
Filter2 = " and a.kcode = @myKcodeStr";
break;
default:
Filter2 = " and a.ktype = @myKcodeStr";
break;
}
switch (myShiftno)
{
case 1:
Filter3 = " and shiftno IN (1,2,5)";
break;
case 2:
Filter3 = " and shiftno = 1";
break;
case 3:
Filter3 = " and shiftno = 2";
break;
default:
Filter3 = " and shiftno = 5";
break;
}
//commandText = "Select * from Wageentry where " + Filter1 + " and empno in (Select empno from Empmain)";
commandText = @"Select a.kdesc,a.kcode,b.khead,b.khdesc,a.emandays,a.eamt,a.wtype,a.wtype2,
(Select " + Filter1 + @"from WageEntry where kdate = (@date1) and kcode = a.kcode" + Filter3 + @") as day1,
(Select " + Filter1 + @"from WageEntry where kdate = (@date2) and kcode = a.kcode" + Filter3 + @") as day2,
(Select " + Filter1 + @"from WageEntry where kdate = (@date3) and kcode = a.kcode" + Filter3 + @") as day3,
(Select " + Filter1 + @"from WageEntry where kdate = (@date4) and kcode = a.kcode" + Filter3 + @") as day4,
(Select " + Filter1 + @"from WageEntry where kdate = (@date5) and kcode = a.kcode" + Filter3 + @") as day5,
(Select " + Filter1 + @"from WageEntry where kdate = (@date6) and kcode = a.kcode" + Filter3 + @") as day6,
(Select " + Filter1 + @"from WageEntry where kdate = (@date7) and kcode = a.kcode" + Filter3 + @") as day7,
(Select " + Filter1 + @"from WageEntry where kdate = (@date8) and kcode = a.kcode" + Filter3 + @") as day8,
(Select " + Filter1 + @"from WageEntry where kdate = (@date9) and kcode = a.kcode" + Filter3 + @") as day9,
(Select " + Filter1 + @"from WageEntry where kdate = (@date10) and kcode = a.kcode" + Filter3 + @") as day10,
(Select " + Filter1 + @"from WageEntry where kdate = (@date11) and kcode = a.kcode" + Filter3 + @") as day11,
(Select " + Filter1 + @"from WageEntry where kdate = (@date12) and kcode = a.kcode" + Filter3 + @") as day12,
(Select " + Filter1 + @"from WageEntry where kdate = (@date13) and kcode = a.kcode" + Filter3 + @") as day13,
(Select " + Filter1 + @"from WageEntry where kdate = (@date14) and kcode = a.kcode" + Filter3 + @") as day14,
(Select " + Filter1 + @"from WageEntry where kdate between (@date1) and (@date14) and kcode = a.kcode" + Filter3 + @") as mandays,
(Select sum(wageamt+addamt+overtime) from WageEntry where kdate between (@date1) and (@date14) and kcode = a.kcode " + Filter3 + @") as totalamt,
(Select sum(wageamt) from WageEntry where kdate between (@date1) and (@date14) and kcode = a.kcode" + Filter3 + @") as wageamt,
(Select sum(addamt) from WageEntry where kdate between (@date1) and (@date14) and kcode = a.kcode" + Filter3 + @") as addamt,
(Select sum(overtime) from WageEntry where kdate between (@date1) and (@date14) and kcode = a.kcode" + Filter3 + @") as overtime,
(@date1) as sdate,(@date14) as edate
from kamjaricode a,kamjarihead b
where a.khead = b.khead" + Filter2 + " order by khead,kcode";
这是为了报告。开始日期和过滤器是从 UI 设置的。这是一份 14 天的工作日报告。使用本地服务器和数据一年,它可以工作,但是一旦我将数据移动到 Azure 并添加了 10 年的数据,报告查询就会开始超时。
Work code A1 day1 day2 day3 ..... day14
Work code A2 day1 day2 day3 ..... day14
Work code A3 day1 day2 day3 ..... day14
Work code A4 day1 day2 day3 ..... day14
Work code A5 day1 day2 day3 ..... day14
Group A Sub-Total
.
.
.
Grand Total for each day for each column.
这就是报告的外观。
选项2:
使用零值生成 14 天的数据表 dt。然后为每一天生成数据表并替换 dt 中的列。
最终输出
解决方案
推荐阅读
- json - 如何从 Typescript 中的键值自定义类生成 JSON 文件
- sql - 当有多个关系时,主键应该是什么?
- javascript - 如果与任何其他网格碰撞,ThreeJS 将网格分成两个或更多
- java - 休眠 session.flush 抛出 java.lang.StackOverflowError
- php - 如何为帖子创建类别标签?我正在使用 laravel 8
- javascript - 我可以获取从 Firestore 集合组查询中获取的文档的路径或引用吗?
- java - Flink 在故障转移时抛出 UnsatisfiedLinkError
- python - 找不到满足 dblib 要求的版本(来自版本:无)并且没有找到 dblib 的匹配分布
- java - 有没有办法在内存中公开 ActiveMQ 端口
- flutter - Dart 中的“线程”使用 Flutter for web