1. 程式人生 > >2017.7.14 使用case when和group by將多條資料合併成一行,並且根據某些列的合併值做條件判斷來生成最終值

2017.7.14 使用case when和group by將多條資料合併成一行,並且根據某些列的合併值做條件判斷來生成最終值

1.效果演示

(1)不做處理

(2)合併多列,並對後四列的值做並集處理

2.SQL語句

(1)不做處理

 1 SELECT  
 2     C .fd_tenantid AS fdTenantId,
 3     C .fd_resid AS fdResid,
 4     C .fd_res_name AS fdResName,
 5     C .fd_service AS fdService,
 6     b.fd_get AS fdGET,
 7     b.fd_post AS fdPOST,
 8     b.fd_put AS fdPUT,
 9     b.fd_delete AS
fdDELETE 10 FROM 11 t_usergroup AS A 12 INNER JOIN t_permission AS b ON A .fd_groupid = b.fd_groupid 13 INNER JOIN t_resource AS C ON b.fd_resid = C .fd_resid 14 INNER JOIN t_tenant AS d ON A .fd_tenantid = d.fd_tenantid 15 WHERE 16 d.fd_tenant_name = 'root' 17 and a.fd_groupid in (10026,10029
) 18 19 ORDER BY c.fd_res_name

(2)合併多列,並對後四列的值做並集處理

當列fd.get的和>=1(至少有一個真),則返回1。

 1 SELECT  
 2     C .fd_tenantid AS fdTenantId,
 3     C .fd_resid AS fdResid,
 4     C .fd_res_name AS fdResName,
 5     C .fd_service AS fdService,
 6      (CASE WHEN SUM(b.fd_get) >=1 THEN 1 ELSE 0 END) AS fdGET,
7 (CASE WHEN SUM(b.fd_post) >=1 THEN 1 ELSE 0 END) AS fdPOST, 8 (CASE WHEN SUM(b.fd_put) >=1 THEN 1 ELSE 0 END) AS fdPUT, 9 (CASE WHEN SUM(b.fd_delete) >=1 THEN 1 ELSE 0 END) AS fdDELETE 10 FROM 11 t_usergroup AS A 12 INNER JOIN t_permission AS b ON A .fd_groupid = b.fd_groupid 13 INNER JOIN t_resource AS C ON b.fd_resid = C .fd_resid 14 INNER JOIN t_tenant AS d ON A .fd_tenantid = d.fd_tenantid 15 WHERE 16 d.fd_tenant_name = 'root' 17 and a.fd_groupid in (10026,10029) 18 19 GROUP BY 20 d.fd_tenantid,c.fd_resid,c.fd_service
21
22 ORDER BY c.fd_res_name

相關推薦

2017.7.14 使用case whengroup by資料合併一行並且根據某些合併條件判斷生成最終

1.效果演示 (1)不做處理 (2)合併多列,並對後四列的值做並集處理 2.SQL語句 (1)不做處理 1 SELECT 2 C .fd_tenantid AS fdTen

關於case when結合group by用時的寫法舉例

原表是個員工檔案,共583人,但case when結合group by用時,寫法不同,其出來的結果也不同 例1: select distinct a.Branch, case when kultur = '碩士' then sum(num) else '0' end as

jquery通過json從資料庫中返回一資料其對應的資料

最近在用jquery框架做專案,整個專案全部採用AJAX技術,用JSON做資料交換,下面的例子是一對多的關係,從資料庫中查出一條主資料,然後顯示這條主資料對應的多條其它資料,如下所示: json.jsp: <%@ page language="java" import="java.util.*" pa

case when decode 的比較分析

fault sig cas 相等 from 圖片 簡潔 oracl oracle數據 一、case when 與 if - else 類似,語句如下:CASE expr WHEN expr1 THEN return_expr1 [WHEN expr2 THE

CASE...WHEN...SUM()函式

按照身份證號前幾位確定屬於什麼地區,得出傳送旅客人員組成每個地區人數,以便做成餅狀圖 SELECT SUM(CASE WHEN SUBSTR(DW_CTKY_GFDPXX.ZJHM,1,4) = ‘3716’ THEN 1 ELSE 0 END)AS 濱州人, SUM(CAS

partition bygroup by對比

今天大概弄懂了partition by和group by的區別聯絡。 1. group by是分組函式,partition by是分析函式(然後像sum()等是聚合函式); 2. 在執行順序上, 以下是常用sql關鍵字的優先順序 from > where > group by >

Sql distinctgroup by的區別

distinct和Group by 區別:  distinct只是將重複的行從結果中出去;  group by是按指定的列分組,一般這時在select中會用到聚合函式。  distinct是把不同的記錄顯示出來。 

mysql聯查中使用ifgroup by會讓你的結果不是你想要的

mysql中的if語句遇到統計count group by的時候會出現不準確的情況,原因是分組後if條件的結果以第一條為準,不會跟著分組   例如: SELECT SQL_NO_CACHE t1.*,t2.nick_name,t2.avatar,IF(t1.user_id=104080,

linq中order by group by (含lambda表示式實現)以及綜合案例

一、Linq對誰適用 linq的語法通過System.Linq下面的Enumerable類提供支援,也就是說,只要是實現了IEnumerable<T>的物件都可以使用Linq的語法來查詢。LINQ定義了大約40個查詢操作符,如select、from、in、where、group by 以及ord

ORACEL條件表示式 CASE WHEN DECODE

SELECT last_name, job_id, salary, DECODE(job_id, 'IT_PROG', 1.10*salary, 'ST_CLERK', 1.15*salary, 'SA_REP', 1.20*salary, salary) REVISED_SALARYFROM employe

tp5 去重查詢 distinctgroup by

例子 $teachers_list=Db::name('class') ->alias('c') ->join('admin a','c.teachers_id = a.id') ->join('teachers t','a

SQL UnionSQL Union All兩者用法區別效率以及與order by group by配合問題

SQL UNION 操作符 UNION 操作符用於合併兩個或多個 SELECT 語句的結果集。 請注意,UNION 內部的 SELECT 語句必須擁有相同數量的列。列也必須擁有相似的資料型別。同時,每條 SELECT 語句中的列的順序必須相同。 SQL UNION

distinctgroup by 去掉重複資料分析

詳見:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp40 用distinct關鍵字只能過濾查詢欄位中所有記錄相同的(記錄集相同),而如果要指定一個欄位卻沒有效果,另外distinct關鍵字會排序 。 s

oracle中distinctgroup by的區別

其實二者沒有什麼可比性,但是對於不包含聚集函式的GROUP BY操作來說,和DISTINCT操作是等價的。不過雖然二者的結果是一樣的,但是二者的執行計劃並不相同。 在Oracle9i中: SQL> SELECT * FROM V$VERSION; BANNER -------

SQL筆記四:order by group by

可能 出現 student sel 排序 字段 條件 count() class 1.order by 排序 使用場景:對查詢的數據結果做一個排序 語法:select 字段A,字段B,...,字段N from...order by 字段A asc(desc),字段Bas

關於distinct group by的去重邏輯淺析

在資料庫操作中,我們常常遇到需要將資料去重計數的工作。例如: 表A,列col A C A B C D A B 結果就是一共出現4個不同的字母A、B、C、D 即結果為4 大體上我們可以選擇count(distinct col)的方法和group+c

mysql分組並行拼接--group_concatgroup by的使用

– 建立表結構 DROP TABLE IF EXISTS exe; CREATE TABLE exe ( id int(3) NOT NULL, type int(3) default NULL, name varchar(10)

聚合函式Group by

聚合函式: sql語言中一種特殊的函式:聚合函式,SUM, COUNT, MAX, MIN, AVG等。這些函式和其它函式的根本區別就是它們一般作用在多條記錄上。SELECT SUM(population) FROM COUNTRY 這裡的SUM作用在所有返回記錄的popu

ThinkPHP去重 distinctgroup by

近期專案中,遇到資料表去重要求,對於ThinkPHP的去重有了更加準確的認識和體會。 兩種去重方式: $test_data = M('hot'); //例項化資料表 $data = $test_d

with as group by 代替 count distinct提高效能

資料庫:postgresql 背景:使用distinct在對某張表某個欄位做去重統計的時候,發現有統計特別慢(30-40s),當前表大小是400w,distinct 後大概60w sql 很簡單(出於安全考慮,欄位和表名稱都做了替換): 原sql: select count