1. 程式人生 > >利用SQL語句中的case、when、sum實現將表中的一列變為多列

利用SQL語句中的case、when、sum實現將表中的一列變為多列

一、原表status的結構如圖所示:


展示的主要欄位有addtime1(丟失時間)、addtime2(撿到時間)、status(狀態)1,表示成功;2 表示認領中;0表示未認領;

二、現在報表設計的需求是統計一個月之內成功認領的個數、兩個月之內成功認領的個數、三個月之內成功認領以及長時間未認領的個數;

三、實現的SQL語句如下:

這個例項是相當於將兩個事件的差值作為一列,將該列拆分為多列,同時使用case、when、sum來實現;

select SUBSTR(addtime,1,7) as '釋出月份',count(*) as '釋出數量',
       sum(case 
       when SUBSTR(addtime1,1,7)-SUBSTR(addtime,1,7)<=1&&status=1 then 1 else 0 end)as '1個月成功認領',
       sum(case 
       when SUBSTR(addtime1,1,7)-SUBSTR(addtime,1,7)>1&&SUBSTR(addtime1,1,7)-SUBSTR(addtime,1,7)<=2&&status=1 then 1 else 0 end)as '2月之內成功認領',
       sum(case 
       when SUBSTR(addtime1,1,7)-SUBSTR(addtime,1,7)>2&&status=1 then 1 else 0 end)as '超過兩個月認領成功',
       sum(case 
       when status=0 then 1 else 0 END) as '長時間未認領'
from `status`
group by SUBSTR(addtime,1,7)
order by SUBSTR(addtime,1,7) desc;

相關推薦

利用SQL語句casewhensum實現變為

一、原表status的結構如圖所示:展示的主要欄位有addtime1(丟失時間)、addtime2(撿到時間)、status(狀態)1,表示成功;2 表示認領中;0表示未認領;二、現在報表設計的需求是統計一個月之內成功認領的個數、兩個月之內成功認領的個數、三個月之內成功認領以

SQL語句casewhenthen的使用

使用語法為:select `pro`.`id` AS `id`,`pro`.`title` AS `title`,`pro`.`name` AS `name`,`pro`.`ltime` AS `ltime`,`pro`.`place` AS `place`,`pro`.`l

MYSQLSQL語句查詢表字段名註釋欄位型別

select column_name,column_comment,data_type from information_schema.columns where table_name='你的表名'

Mysql使用sql語句查詢前一個天前一月時間的方法

查詢一天:select * from 表名 where to_days(時間欄位名) = to_days(now());昨天SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 時間欄位名) <= 17天SELECT *

ORACLE通過SQL語句(alter table)來增加刪除修改欄位

新增欄位的語法:alter table tablename add (column datatype [default value][null/not null],….); 修改欄位的語法:alter table tablename modify (column datatype [default va

SQL語句的寫法:UpdateCase Select 一起的用法

修改資料,需要驗證後修改對應的資料,而驗證的欄位不再修改表中,就需要對多表進行查詢,花了些時間想出瞭如下辦法,感覺還是挺有用的,也挺過癮的,之前很少碰到這樣的,所以再次記錄下: (此業務邏輯沒有詳細說明,如果你正在看這些,只需要看SQL的寫的語法,相信您能看懂,也希望對您

數據庫復習總結(6)-SQL語句入門(腳本命令)

sql cal http sys es2017 mil 多行 數據庫 alt 腳本操作: 註釋:--單行註釋,/**/多行註釋 數據庫:創建、刪除 (可以通過查看master數據庫中的sysdatabase表,來了解當前存在的數據庫) 點擊“新建查詢”,選中哪句執

利用SQL語句查詢數據庫所有

結果集 sel clas 使用 創建 ref 註意 目錄 tails Oracle: SELECT * FROM ALL_TABLES;--系統裏有權限的表 SELECT * FROM DBA_TABLES;-- 系統表 SELECT * FROM USER_TA

mysql利用sql語句修改字段名稱,字段長度等操作

HA change 是我 重構 不為 ble 技術 網站重構 add 在網站重構中,通常會進行數據結構的修改,所以添加,刪除,增加mysql表的字段是難免的,有時為了方便,還會增加修改表或字段的註釋,把同字段屬性調整到一塊兒。這些操作可以在phpmyadmin或者別的mys

MyBatis-動態SQL的ifchoosewhenotherwisetrimwheresetforeach標籤的使用

動態SQL是MyBatis最強大的特性之一。用於實現動態SQL的主要元素如下: 1、if 2、choose、when、otherwise 3、trim、where、set 4、foreach 程式碼示例: 1、if

【Mybatis】動態SQL之choosewhenotherwise

Mybatis中沒有if-else的寫法,取而代之的是choose-when-otherwise。choose在最外面,when相當於if,otherwise則相當於else。 <choose> <wh

sql語句CASE WHEN 搜尋語句

今天查詢資料庫時遇到一個問題,一個表中存了三種不同狀態的的記錄,即倉庫日誌表裡存了 領出,報廢,歸還三個狀態的欄位,而我需要做的操作是統計出一個人的領用總數量,報廢總數量,和歸還總數量,自己用了很多種方法,但都行不通,最後還是大神提供了case when語句才得以解決,所以寫

MyBatis-動態SQL的ifchoosewhenotherwisetrimwheresetforeach使用

動態SQL是MyBatis最強大的特性之一。用於實現動態SQL的主要元素如下: 1、if 2、choose、when、otherwise 3、trim、where、set 4、foreach 程式碼示例: 1、if EmpMapper.xml配置 <select

sql語句的備份(匯入匯出)

----------匯出----------- #結構+資料 mysqldump -u 使用者名稱 -p 密碼 資料庫名稱>匯出檔案路徑 #結構 mysqldump -u 使用者名稱 -p 密碼 -d 資料庫名稱>匯出檔案路徑   ----------匯入-----

SQL_3th_T-SQL語句建立和刪除資料庫新增和刪除約束

在SQL Server 2008 R2中點選新建查詢,輸入如下程式碼,選中程式碼段,並點選執行,就能執行選中區域程式碼: --使用數T-SQL語句來建立資料庫 create database Students on ( name='Students', --這是資料檔案的邏

T-SQL語句case when then 條件判斷

CASE    WHEN 條件1 THEN 結果1    WHEN 條件2 THEN 結果2    WHEN 條件3 THEN 結果3    WHEN 條件4 THEN 結果4 .........    WHEN 條件N THEN 結果N    ELSE 結果X END Case具有兩種格式。簡單Case函

【NCRE】---拼接SQL語句Case....When語句

#region 將答案和分數更新到資料庫中 李少然 2015年12月26日10:09:07 /// <summary> /// 將答案和分數更新到資料庫中 /// </summary> /// <param na

SQL語句CASE WHEN

CASE WHEN 基本概念 Case具有兩種格式:簡單Case函式和Case搜尋函式。 簡單Case函式: CASE sex WHEN ‘1’ THEN ‘男’ WHEN ‘0’ THEN ‘女’ ELSE ‘其他’ END Case搜尋函式:

Sql語句優化之用existsnot exists替代innot in

在許多基於基礎表的查詢中,為了滿足一個條件,往往需要對另一個表進行聯接。在這種情況下, 使用exists(或not exists)通常將提高查詢的效率。在子查詢中,not in子句將執行一個內部的排序和合並。無論在哪種情況下,not in都是最低效的 (因為它對子查詢中的表

通過SQL語句(alter table)來增加刪除修改欄位

新增欄位的語法:alter table tablename add (column datatype [default value][null/not null],….); 修改欄位的語法:alter table tablename modify (column dat