自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

將一列中多行相同的值只顯示在一行

數(shù)據(jù)庫 SQL Server
簡單說下我的實現(xiàn)思路: 1.按id、name排序給原始數(shù)據(jù)生成行號 2.用遞歸判斷上下行的id是否相等,第一次出現(xiàn)計數(shù)器初始值為1,后面再出現(xiàn)則計數(shù)器+1 3.對步驟2中生成的結果集再處理,計數(shù)器為1的id不變,計數(shù)器大于1則id為空字符串

   數(shù)據(jù)庫環(huán)境:SQL SERVER 2008R2

  需求如題,左圖為初始數(shù)據(jù),右圖是已實現(xiàn)需求的數(shù)據(jù)展示

 

  簡單說下我的實現(xiàn)思路

  1.按id、name排序給原始數(shù)據(jù)生成行號

  2.用遞歸判斷上下行的id是否相等,***次出現(xiàn)計數(shù)器初始值為1,后面再出現(xiàn)則計數(shù)器+1

  3.對步驟2中生成的結果集再處理,計數(shù)器為1的id不變,計數(shù)器大于1則id為空字符串

  我把實現(xiàn)的代碼貼出來

 

  1. /*準備基礎數(shù)據(jù)*/ 
  2. WITH    x0 
  3.           AS ( SELECT   1 AS id , 
  4.                         'a' AS NAME 
  5.                UNION ALL 
  6.                SELECT   1 AS id , 
  7.                         'b' AS NAME 
  8.                UNION ALL 
  9.                SELECT   1 AS id , 
  10.                         'c' AS NAME 
  11.                UNION ALL 
  12.                SELECT   2 AS id , 
  13.                         'e' AS NAME 
  14.                UNION ALL 
  15.                SELECT   2 AS id , 
  16.                         'd' AS NAME 
  17.                UNION ALL 
  18.                SELECT   3 AS id , 
  19.                         'f' AS NAME 
  20.                UNION ALL 
  21.                SELECT   4 AS id , 
  22.                         'h' AS NAME 
  23.                UNION ALL 
  24.                SELECT   4 AS id , 
  25.                         'j' AS NAME 
  26.              ),/*按id、name排序生成行號*/ 
  27.         x1 
  28.           AS ( SELECT   ROW_NUMBER() OVER ( ORDER BY id, name ) AS tid , 
  29.                         CAST(id AS VARCHAR(2)) id , 
  30.                         name 
  31.                FROM     x0 
  32.              ),/*遞歸設置計數(shù)器*/ 
  33.         x2 ( tid, id, namelevel ) 
  34.           AS ( SELECT   tid , 
  35.                         id , 
  36.                         name , 
  37. AS level 
  38.                FROM     x1 
  39.                WHERE    tid = 1 
  40.                UNION ALL 
  41.                SELECT   t1.tid , 
  42.                         t1.id , 
  43.                         t1.NAME , 
  44.                         CASE WHEN t1.id = t2.id THEN level + 1 
  45.                              ELSE 1 
  46.                         END level 
  47.                FROM     x1 t1 
  48.                         INNER JOIN x2 t2 ON t1.tid = t2.tid + 1 
  49.              ) 
  50.     /*計數(shù)器為1則id不動,否則置為空字符串*/ 
  51.     SELECT  CASE WHEN level = 1 THEN id 
  52.                  ELSE '' 
  53.             END id , 
  54.             name 
  55.     FROM    x2 

 

  先比我的實現(xiàn),有一網友提供了更簡單的實現(xiàn)方式

  我們來看一下他是怎么實現(xiàn)的 

  1. WITH    x0 
  2.           AS ( SELECT   1 AS id , 
  3.                         'a' AS NAME 
  4.                UNION ALL 
  5.                SELECT   1 AS id , 
  6.                         'b' AS NAME 
  7.                UNION ALL 
  8.                SELECT   1 AS id , 
  9.                         'c' AS NAME 
  10.                UNION ALL 
  11.                SELECT   2 AS id , 
  12.                         'e' AS NAME 
  13.                UNION ALL 
  14.                SELECT   2 AS id , 
  15.                         'd' AS NAME 
  16.                UNION ALL 
  17.                SELECT   3 AS id , 
  18.                         'f' AS NAME 
  19.                UNION ALL 
  20.                SELECT   4 AS id , 
  21.                         'h' AS NAME 
  22.                UNION ALL 
  23.                SELECT   4 AS id , 
  24.                         'j' AS NAME 
  25.                UNION ALL 
  26.                SELECT   1 AS id , 
  27.                         'j' AS NAME 
  28.              ) 
  29.     SELECT  REPLACE(CASE WHEN ROW_NUMBER() OVER ( PARTITION BY CAST(ID AS VARCHAR(2)) ORDER BY NAME ) <> '1' 
  30.                          THEN 0 
  31.                          ELSE CAST(ID AS VARCHAR(20)) 
  32.                     END, 0, ''AS ID , 
  33.             NAME 
  34.     FROM    x0 

 

實現(xiàn)的思路和我一樣,但他的方法比我的簡單,也容易理解。

我相信,實現(xiàn)該需求的方法不局限于這2種,歡迎各位看官提出更多的解題方法。

(本文完)

責任編輯:honglu 來源: 博客園
相關推薦

2009-07-28 08:36:45

TemplateFie

2020-08-24 08:25:48

Python開發(fā)工具

2022-11-08 09:38:18

Linux命令行刪除文件

2019-12-25 14:08:50

Pandas數(shù)據(jù)計算

2016-12-02 08:53:18

Python一行代碼

2021-01-21 15:44:03

vlookup函數(shù)數(shù)據(jù)區(qū)域Match函數(shù)

2011-08-25 09:17:31

Java調用存儲過程返回一行或多行結果集

2010-10-27 13:16:41

oracle并行查詢

2017-04-05 11:10:23

Javascript代碼前端

2022-11-03 10:36:30

Linux隱藏文件

2021-11-02 16:25:41

Python代碼技巧

2010-09-10 13:37:59

SQLCOUNT()函數(shù)

2018-01-30 08:47:46

存儲查詢性能

2014-02-12 13:43:50

代碼并行任務

2022-04-09 09:11:33

Python

2020-08-12 14:54:00

Python代碼開發(fā)

2022-09-25 00:07:18

Python圖形界面

2021-07-26 10:32:54

MySQL數(shù)據(jù)庫存儲

2021-07-19 07:58:02

Spark DataFrame 分布式

2016-12-16 19:13:33

擴展性數(shù)據(jù)庫
點贊
收藏

51CTO技術棧公眾號