【原】關於資料倉儲中複雜報表SQL語句的寫法
在資料倉儲的基本報表製作過程中,通常會使用SQL作為資料來源,可是普通的SQL實在不適合處理一些較為複雜的邏輯判斷;一般而言,待查詢的資料型別主要包括日期型、數字型、字串這三類資料型別;在報表查詢介面前段,實際上會對查詢的資料作一些預設處理,例如有些欄位可輸可不輸,輸入的欄位需要按照輸入的內容進行查詢,而未輸入的欄位通常會選擇忽略該條件的存在,如何判斷該欄位是否輸入了呢,當然是針對這些未輸入的欄位提供一些預設值了,例如某個數字型別的欄位未輸入,則賦一個預設值-1,某個字串欄位未輸入,則賦一個預設值為’ ‘,某個日期未輸入,則賦一個預設值為SYSDATE;這個時候只要在SQL中針對不同的預設值和應該輸入的值進行處理就OK了。
當然當更加複雜的查詢邏輯實在不適合用SQL處理時,最好選擇使用儲存過程的方法了;其次過於複雜的SQL可能會帶來資料庫效能問題,因此這些基於SQL的報表最好不要在大型資料表上操作。
下面是構造了一個包含以上三種資料型別的資料表,並填充了一些測試資料。
CREATE TABLE TestReportParameter ( VarcharField VARCHAR2(20), NumberField NUMBER(10,0), DateField DATE );
INSERT INTO TestReportParameter VALUES('a',1,SYSDATE-1); INSERT INTO TestReportParameter VALUES('b',2,SYSDATE); INSERT INTO TestReportParameter VALUES('c',3,SYSDATE+2); INSERT INTO TestReportParameter VALUES('d',4,SYSDATE-2); COMMIT; |
處理的秘密在於對預設值和輸入值之間做一個判斷,保持任何一種值的存在為TRUE即可。
對於單值資料的處理比較簡單,參看下面指令碼
SELECT * FROM TestReportParameter WHERE (' ' = &VarcharField OR VarcharField = &VarcharField) AND (-1 = &NumberField OR NumberField = &NumberField) |
對於多選值的處理則一定要使用DECODE函式才能避免錯誤的發生,處理的邏輯同上。
SELECT * FROM TestReportParameter WHERE ( ' '=DECODE(&VarcharField,' ',' ',&VarcharField) OR VarcharField IN (&VarcharField) ) AND ( -1=DECODE(&NumberField,-1,-1,&NumberField) OR NumberField IN (&NumberField) ) |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/6517/viewspace-223924/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 利用sql語句找出表中有重複記錄的三種sql寫法SQL
- 命令列寫複雜語句命令列
- 複製表結構和資料SQL語句SQL
- 資料倉儲中的分析SQL——資料倉儲手冊SQL
- 關於Mybatis中SQL語句的整理MyBatisSQL
- SQL語句規範的寫法SQL
- OCI插入SQL語句的寫法SQL
- 關於在SAP中SQL語句的效能SQL
- 關於資料湖、資料倉儲的想法
- 關於資料倉儲的書籍
- 關於資料倉儲的設計!
- T-SQL——關於表資料的複製插入SQL
- Oracle如何複製表的sql語句OracleSQL
- 關於資料倉儲 — ODS概念
- 複雜控制語句
- 資料庫分庫,原來 SQL 和儲存過程寫的報表咋辦?資料庫SQL儲存過程
- 一、HIVE基本語法:建立資料倉儲Hive
- MySQL關於根據日期查詢資料的sql語句MySql
- 關於sql語句的優化SQL優化
- Oracle表部分資料提取SQL語句OracleSQL
- SQL Server中巧用另類寫法代替Like語句SQLServer
- 關於資料倉儲和OLAP的問題!
- 編寫迴圈插入表資料的語句。
- 關於系統複雜性的一句箴言箴言
- 複雜查詢語句的使用
- 關於MS資料倉儲備份(轉)
- SQL語句資料SQL
- 一個過濾重複資料的sql語句(轉)SQL
- 關於資料倉儲成功的評價標準
- 【資料操作】SQL語句效能調整原則SQL
- 複雜SQL構造資料:SQL
- 刪除重複資料的三種sql寫法SQL
- 透過sql語句建立表時指定表空間的語法SQL
- 統計報表 -- sql統計語句SQL
- 【MySQL】經典資料庫SQL語句編寫練習題——SQL語句掃盲MySql資料庫
- 單條SQL語句實現複雜邏輯幾例~~SQL
- 資料倉儲中的概念
- Sql Server 資料庫獲取字串中小寫字母的SQL語句SQLServer資料庫字串