在DB2中进行行转列比较麻烦,这里我在select里用case语法代替行转列操作
使用以下查询语句可以实现
select t.CHECK_UNIT as 公司,
t.BOE_DEPT_ID as 部门,
sum(t.total) as 单据总数,
sum(t.seven) as 星期天,
sum(t.one) as 星期一,
sum(t.two) as 星期二,
sum(t.three) as 星期三,
sum(t.four) as 星期四,
sum(t.five) as 星期五,
sum(t.six) as 星期六
from (select bh.CHECK_UNIT,
bh.BOE_DEPT_ID,
count(*) as total,
count(case
when (DAYOFWEEK(bh.BOE_DATE) = 1) then
1
end) as seven,
count(case
when (DAYOFWEEK(bh.BOE_DATE) = 2) then
1
end) as one,
count(case
when (DAYOFWEEK(bh.BOE_DATE) = 3) then
1
end) as two,
count(case
when (DAYOFWEEK(bh.BOE_DATE) = 4) then
1
end) as three,
count(case
when (DAYOFWEEK(bh.BOE_DATE) = 5) then
1
end) as four,
count(case
when (DAYOFWEEK(bh.BOE_DATE) = 6) then
1
end) as five,
count(case
when (DAYOFWEEK(bh.BOE_DATE) = 7) then
1
end) as six
from sie.SIE_BOE_HEADERS bh
where bh.BOE_DATE > TIMESTAMP('2007-7-20-12.00.00.000000')
group by bh.CHECK_UNIT, bh.BOE_DEPT_ID, DAYOFWEEK(bh.BOE_DATE)) t
group by t.CHECK_UNIT, t.BOE_DEPT_ID;
相关推荐
在 WHERE 子句中使用函数可能会导致索引失效,从而降低查询性能。例如: ```sql SELECT * FROM employees WHERE UPPER(name) LIKE 'JOHN%'; ``` 如果可能的话,尽量使用预处理方式来避免这种情况: ```sql CREATE ...
DB2在v8版本中增加了对类似ROWID的支持,允许用户更方便地进行行级别的操作。 ##### 7. 数字转换 **Oracle**: `select to_number('123') from dual;` **DB2**: `select cast('123' as integer) from sysibm....
- **使用CASE替代IF**:在许多情况下,可以将IF结构重写为CASE表达式来简化查询逻辑,提高解析速度。 #### 三、并发性和系统统计信息 除了上述查询级别的优化外,还需要关注并发性和系统的统计信息: **1. 并发性...
5. **避免使用COUNT(*)及EXISTS的方法:** 使用更高效的查询方法来替代这些操作。 6. **COMMIT的次数要适当:** 频繁提交可能会降低性能。 7. **INSERT和UPDATE速度比较:** 在某些情况下,使用UPDATE可能比INSERT更快...
- Oracle的DECODE函数在DB2中不支持,可以使用CASE WHEN语句替代,如`SELECT CASE WHEN f_areaid IS NULL THEN '空' ELSE f_areaid END FROM masa_user`。 7. **NVL函数**: - Oracle的NVL在DB2中需要使用...
- **类似DECODE的转码操作**:DB2中可以使用`CASE`表达式来实现类似Oracle DECODE的功能。 - **类似CHARINDEX查找字符在字符串中的位置**:使用`POSITION`函数来实现类似功能。 - **类似DATEDIF计算两个日期的相差...
- **类似于ORACLE的TRUNCATE清表但不记日志的做法**:在DB2中使用`TRUNCATE TABLE`命令清除表中的所有数据而不记录日志。 - **用CLI编程批量的INSERT**:使用CLI(Call Level Interface)进行批量插入操作,提高...
尽管文档中提到CURSOR不能定义为WITH UR,但在实际操作中,DB2允许使用`WITH UR`关键字与CURSOR结合。 #### CURSOR ORDER BY 以后不能FOR UPDATE DB2中确实存在这样的限制:带有`ORDER BY`子句的CURSOR不能使用`FOR...
- 在移植过程中,需要识别 DB2 LUW 中使用但 UDB400 不支持的功能。 - 评估这些功能对应用的影响,并考虑使用替代方案或重新设计。 - 对于不支持的功能,可能需要进行大量的重构工作。 #### 十一、视图(Views) ...
db2 IBM DB2在企业级的应用最为广泛, 在全球的500家最大的企业中,几乎85%以上用DB2数据库服务器。收费 大型企业 Access 微软 Access是一种桌面数据库,只适合数据量少的应用,在处理少量 数据和单机访问的数据库时...
优化方案之一是使用窗口函数或子查询来替代双表JOIN,以减少不必要的数据处理。 ### 解决SQL查询中的常见问题 #### 处理重复数据 当需要找出重复记录时,可以使用子查询结合GROUP BY和HAVING子句,例如: ```sql...
- 存储过程可以通过声明一个游标并在客户端应用程序中使用`OPEN`、`FETCH`等语句来返回结果集。 #### 二、DB2编程性能优化 **2.1 大数据的导表** - 在处理大量数据时,使用`BULK LOAD`命令可以显著提高导入效率。...
- **临时表的作用**:临时表是在一个会话过程中使用的,不会被其他用户看到。它们非常适合于保存中间结果或者用于复杂的查询处理。 - **创建与使用**:可以通过`CREATE GLOBAL TEMPORARY TABLE`语句来创建临时表,并...