男女做爽爽爽网站-男女做羞羞高清-男女做爰高清无遮挡免费视频-男女做爰猛烈-男女做爰猛烈吃奶啪啪喷水网站-内射白浆一区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

[點晴模切ERP]SQL SERVER 實現相同記錄為空顯示(多列去除重復值,相同的只顯示一條數據)

Ccoffee
2023年3月20日 16:15 本文熱度 2894
:SQL SERVER 實現相同記錄為空顯示(多列去除重復值,相同的只顯示一條數據)


sql server語句查詢中碰到結果集有重復數據,需要把這個重復數據匯總成一條顯示。其余則正常顯示。

使用SQL內置函數 ROW_NUMBER() 加 PARTITION 完成

ROW_NUMBER() OVER ( PARTITION BY '相同數據字段' ORDER BY GETDATE() ) row

PARTITION BY和GROUP BY類似。

GROUP BY會影響行數,針對于所有字段進行一個聚合。

PARTITION BY則不會影響行數,用做于此處剛剛好。

例:查詢出字段有A、B、C、D、E。其中A代表姓名、B代表年齡、C代碼性別、D代表愛好、E代表喜歡游戲。

其中A、B、C,這三個字段中有重復字段,而D、E則無重復字段。

那么語句便可以這樣寫

select *,ROW_NUMBER() OVER ( PARTITION BY A,B,C ORDER BY GETDATE() ) row from tab

這樣你便會看到你的結果中row字段會依據A、B、C三個字段依據不同值分別做一個分組。

ABCDErow
小明181籃球LOL1
小明181乒乓球DNF2
小黃182游泳LOL1
小黃182滑板QQ飛車2
小黃182跑步戰地五3
小孫181睡覺劍網三1

所以以上數據便是依據PARTITION BY分組所顯示行號。

既然已經得到這樣的數據,那么把相同的數據更改為空就很簡單了。使用CASE WHEN便可以實現。

  1. select  CASE WHEN row = 1 THEN T.A

  2.             ELSE ''

  3.        END A ,

  4.        CASE WHEN row = 1 THEN T.B

  5.             ELSE ''

  6.        END B ,

  7.        CASE WHEN row = 1 THEN T.C

  8.             ELSE ''

  9.        END C ,

  10.        T.D ,

  11.        T.E

  12. from    ( select    * ,

  13.                    ROW_NUMBER() OVER ( PARTITION BY A, B, C ORDER BY GETDATE() ) row

  14.          from      tab

  15.        ) T

那么以上語句執行最終結果便是一下表格里的數據:

ABCDErow
小明181籃球LOL1



乒乓球DNF2
小黃182游泳LOL1



滑板QQ飛車2



跑步戰地五3
小孫181睡覺劍網三1

這樣一來就簡介多了,SQL SERVER很多內置函數還是非常好用的。

最后放上一個測試臨時表格供大家測試吧!

  1. create TABLE #tab

  2.    (

  3.      headerNo VARCHAR(10) ,

  4.      machineNO VARCHAR(10) ,

  5.      descrption NVARCHAR(20) ,

  6.      artNo VARCHAR(20) ,

  7.      qty INT ,

  8.      repartno VARCHAR(20) ,

  9.      repqty INT

  10.    )

插入數據

  1. insert INTO #tab select 'HD01','0101520',N'電池出問題','102020',2,'102020',2

  2. insert INTO #tab select 'HD01','0101520',N'電池出問題','101010',2,'202020',2

  3. insert INTO #tab select 'HD01','0101520',N'電池出問題','126888',2,'102020',2

  4. insert INTO #tab select 'HD02','01012221',N'D電機故障','102020',2,'102020',2

  5. insert INTO #tab select 'HD03','12312312',N'突然停機','102020',2,'102020',2

  6. insert INTO #tab select 'HD03','12312312',N'突然停機','102020',2,'102020',2

  7. insert INTO #tab select 'HD04','12312344',N'皮帶松了','102020',2,'102020',2

語句查詢執行

  1. select  CASE WHEN row = 1 THEN headerNo

  2.             ELSE ''

  3.        END headerNo ,

  4.        CASE WHEN row = 1 THEN machineNO

  5.             ELSE ''

  6.        END machineNO ,

  7.        CASE WHEN row = 1 THEN descrption

  8.             ELSE ''

  9.        END descrption ,

  10.        artNo ,

  11.        qty ,

  12.        repartno ,

  13.        repqty

  14. from    ( select    * ,

  15.                    ROW_NUMBER() OVER ( PARTITION BY headerNo, machineNO,

  16.                                        descrption ORDER BY GETDATE() ) row

  17.          from      #tab

  18.        ) M

以上測試SQL語句來自博客園以下老哥的文章,它的文章只編寫了SQL語句供予測試。

我加以修改,做了一些理解性的分析。

https://www.cnblogs.com/panxuguang/p/5668520.html

后續更新

PARTITION BY簡稱分區函數,GROUP BY為聚合函數。
  1. PARTITION BY的使用之處可以有很多,文章的上半部分查詢出來的數據用于報表非常合適。
    但用作于程序中就會顯得比較復雜。
    以此可以思考,既然 PARTITION BY是依據當前字段不同的字段做一個分組,不影響數據結構、數據行。
    結合ROW_NUMBER對分組后的數據進行一個排序。這樣就可以根據ROU_NUMBER后的字段進行數據查詢。
    同時,PARTITION BY 還可以在一個查詢語句中針對于多個字段進行查詢。但后續的PARTITION BY須攜帶上前一個字段。
    比如上面例子中再增加一個字段,父母標識。L字段中,0代表自己,1代表母親,2代表父親。DE就表示父母的愛好。            

  1. select  CASE WHEN row = 1 THEN T.A

  2.             ELSE ''

  3.        END A ,

  4.        CASE WHEN row = 1 THEN T.B

  5.             ELSE ''

  6.        END B ,

  7.        CASE WHEN row = 1 THEN T.C

  8.             ELSE ''

  9.        END C ,

  10.      CASE WHEN row2 = 1 THEN T.L

  11.                ELSE ''

  12.        END F,

  13.        T.D ,

  14.        T.E

  15. from    ( select    * ,

  16.                    ROW_NUMBER() OVER ( PARTITION BY A, B, C ORDER BY GETDATE() ) row,

  17.                    ROW_NUMBER() OVER ( PARTITION BY A, B, C, L ORDER BY GETDATE() ) row2

  18.          from      tab

  19.        ) T  


  1. 這樣除了第一次的依據A,B,C進行了一個內部分區排序,
    隨后第二次操作就會依據A,B,C為參照針對L的不同字段在做一個內部分區排序。數據就是下面的樣式

ABCLDE
小明1810籃球LOL




乒乓球DNF



2籃球吃雞




跳傘黎明殺機



1跳繩和平精英
小黃182
游泳LOL




滑板QQ飛車




跑步戰地五
小孫181
睡覺劍網三

通過PARTITON BY 分區排序之后,你還可以取以什么為條件了前三條,以什么字段為排序的第一條等等操作



點晴模切ERP更多信息:http://moqie.clicksun.cn,聯系電話:4001861886

該文章在 2023/3/20 16:15:26 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 丁香五月亚洲综合色婷婷色婷婷 | 欧美小伙与老太做爰视频 | 亚洲欧美日韩高清在线 | 东京热一本到里综合不卡 | 国产精品无遮挡又黄又爽免费网站 | 久久人妻av无码中文专区 | 久久久国产97久久国产 | 欧美成人精品欧美一级乱黄 | 亚洲不卡无码永久在线观看 | 日本岛国色情大片在线观看电影在线看 | 国产真实乱人视频在线看 | 美女扒开让男人桶 | 欧美日韩国产综合另类 | 国产成人亚洲精品无码v大片 | 久久久亚洲精品午夜福利 在线看欧美三级中文经典 国产91精品成人不卡在线观看 | 色之综合网| 国产精品污WWW在线观看 | αv天堂亚洲师生中文制服 αv天堂一区二区三区 | 国产三级久久久精 | 欧美日韩中文字幕 | 乱码丰满人妻一二三区 | 2024久久天天躁狠狠躁夜夜 | 成人欧美在线观看 | 日韩人妻无码一区二区三区中文 | 久久久久精品久久久久影院蜜桃 | 香港日本三级在线播放 | 亚洲日韩欧美少妇精品 | 国产成人精品亚洲av无人区一区 | 国产网曝在线观看视频 | 日韩一区二区三区射精-百度 | 久久久久琪琪去精品色一到本 | 午夜播放器在线观看 | 美国一级毛片免费 | 午夜亚洲无码 | 狠狠撸亚洲视频 | 亚洲无线一线二线三线区别 | 亚洲日韩成人a | 久久精品国产亚洲av四叶草 | 中文无码字幕一区到五区免费 | 自拍三区播 | 国产精品高潮呻吟AV久久 |