GROOVY資料列變行

2021-08-31 08:55:32 字數 1254 閱讀 9989

在開發中遇到了列變行的問題,簡單記錄如下:

tb_case 記錄了 用例id 用例名稱。tb_ret 記錄了執行結果,執行時間結果狀態。

要求查詢一段時間內的記錄獲取如下資料包表:

1點 2點 3點 4點 5點 ............. 24點

用例1  1     2   1     4   3                   4

用例5  1     3   1     4   3                   4

用例4  1     2   1     4   3                   4

用groovy**可以很容易實現,不超過50行,樣例如下:

import groovy.sql.sql

def sql = sql.newinstance('jdbcurl', '使用者名稱', '密碼', '驅動')

def string s_in = '1, 2, 3, 51, 9999'

def string st_case = """select c_id, c_name from tb_case where c_id in ($s_in)"""

def string st_query = """

select c_id, to_char(r_start, 'yyyymmddhh24') rtime, sum(r_stat) stat

from tb_ret

where c_id in ($s_in)

and r_start between to_date('20100710', 'yyyymmdd') and to_date('20100720', 'yyyymmdd')

group by c_id, to_char(r_start, 'yyyymmddhh24')

"""def cases = [:]

sql.eachrow(st_case)

def rets = [:]

def times = [:]

sql.eachrow(st_query)

if (!rets.containskey(c_id))

rets[c_id][rtime] = stat

}print "名稱".padright(16)

times.sort().each

println ""

//補充缺少的用例

cases.each

rets.sort().each

println ""

}

用sql語句要求行變列,列變行

create table tb 姓名 varchar 10 課程 varchar 10 分數 int insert into tb values 張三 語文 74 insert into tb values 張三 數學 83 insert into tb values 張三 物理 93 insert...

Oracle行轉列 行變列

在寫一些複雜的sql的時候,經常需要使用到行變列的技巧,一些帳務系統的統計也經常會寫到這樣的sql。主要用到了max decode或nvl這些函式來達到目的。寫下來讓大家互相學習學習!下面是乙個行變列的例子。如表row2column2有以下資料 名字 課程 分數 1 張三 語文 80 2 張三 數學...

MySQL 行變列 查詢

sql語言的case語句備忘 概述 sql語句中的case語句與高階語言中的switch語句,是標準sql的語法,適用與乙個條件判斷有多種值的情況下分別執行不同的操作。靈活應用case語句可以使sql語句變得簡潔易讀,下面在db2環境下通過乙個簡單的查詢來展示sql case語句的強大功能。表 t ...