`

db2 select中使用case替代行转列操作 .

    博客分类:
  • sql
 
阅读更多

在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;

分享到:
评论

相关推荐

    DB2 SQL 精萃.pdf

    在 WHERE 子句中使用函数可能会导致索引失效,从而降低查询性能。例如: ```sql SELECT * FROM employees WHERE UPPER(name) LIKE 'JOHN%'; ``` 如果可能的话,尽量使用预处理方式来避免这种情况: ```sql CREATE ...

    ORACLE与DB2的区别和转换

    DB2在v8版本中增加了对类似ROWID的支持,允许用户更方便地进行行级别的操作。 ##### 7. 数字转换 **Oracle**: `select to_number('123') from dual;` **DB2**: `select cast('123' as integer) from sysibm....

    DB2 优化,db2性能优化,查询优化

    - **使用CASE替代IF**:在许多情况下,可以将IF结构重写为CASE表达式来简化查询逻辑,提高解析速度。 #### 三、并发性和系统统计信息 除了上述查询级别的优化外,还需要关注并发性和系统的统计信息: **1. 并发性...

    DB2学习手册

    5. **避免使用COUNT(*)及EXISTS的方法:** 使用更高效的查询方法来替代这些操作。 6. **COMMIT的次数要适当:** 频繁提交可能会降低性能。 7. **INSERT和UPDATE速度比较:** 在某些情况下,使用UPDATE可能比INSERT更快...

    DB2、ORACLE

    - 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中需要使用...

    牛新庄:DB2使用经验

    - **类似于ORACLE的TRUNCATE清表但不记日志的做法**:在DB2中使用`TRUNCATE TABLE`命令清除表中的所有数据而不记录日志。 - **用CLI编程批量的INSERT**:使用CLI(Call Level Interface)进行批量插入操作,提高...

    DB2手册pdf

    尽管文档中提到CURSOR不能定义为WITH UR,但在实际操作中,DB2允许使用`WITH UR`关键字与CURSOR结合。 #### CURSOR ORDER BY 以后不能FOR UPDATE DB2中确实存在这样的限制:带有`ORDER BY`子句的CURSOR不能使用`FOR...

    DB2 LUW to UDB400 v3

    - 在移植过程中,需要识别 DB2 LUW 中使用但 UDB400 不支持的功能。 - 评估这些功能对应用的影响,并考虑使用替代方案或重新设计。 - 对于不支持的功能,可能需要进行大量的重构工作。 #### 十一、视图(Views) ...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    db2 IBM DB2在企业级的应用最为广泛, 在全球的500家最大的企业中,几乎85%以上用DB2数据库服务器。收费 大型企业 Access 微软 Access是一种桌面数据库,只适合数据量少的应用,在处理少量 数据和单机访问的数据库时...

    sql面试题(sql查询优化)

    优化方案之一是使用窗口函数或子查询来替代双表JOIN,以减少不必要的数据处理。 ### 解决SQL查询中的常见问题 #### 处理重复数据 当需要找出重复记录时,可以使用子查询结合GROUP BY和HAVING子句,例如: ```sql...

    DB2编程序小小技巧

    - 存储过程可以通过声明一个游标并在客户端应用程序中使用`OPEN`、`FETCH`等语句来返回结果集。 #### 二、DB2编程性能优化 **2.1 大数据的导表** - 在处理大量数据时,使用`BULK LOAD`命令可以显著提高导入效率。...

    DB2编程序技巧 (一)

    - **临时表的作用**:临时表是在一个会话过程中使用的,不会被其他用户看到。它们非常适合于保存中间结果或者用于复杂的查询处理。 - **创建与使用**:可以通过`CREATE GLOBAL TEMPORARY TABLE`语句来创建临时表,并...

Global site tag (gtag.js) - Google Analytics