狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

[點(diǎn)晴模切ERP]SQL SERVER 實(shí)現(xiàn)相同記錄為空顯示(多列去除重復(fù)值,相同的只顯示一條數(shù)據(jù))

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


sql server語(yǔ)句查詢(xún)中碰到結(jié)果集有重復(fù)數(shù)據(jù),需要把這個(gè)重復(fù)數(shù)據(jù)匯總成一條顯示。其余則正常顯示。

使用SQL內(nèi)置函數(shù) ROW_NUMBER() 加 PARTITION 完成

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

PARTITION BY和GROUP BY類(lèi)似。

GROUP BY會(huì)影響行數(shù),針對(duì)于所有字段進(jìn)行一個(gè)聚合。

PARTITION BY則不會(huì)影響行數(shù),用做于此處剛剛好。

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

其中A、B、C,這三個(gè)字段中有重復(fù)字段,而D、E則無(wú)重復(fù)字段。

那么語(yǔ)句便可以這樣寫(xiě)

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

這樣你便會(huì)看到你的結(jié)果中row字段會(huì)依據(jù)A、B、C三個(gè)字段依據(jù)不同值分別做一個(gè)分組。

ABCDErow
小明181籃球LOL1
小明181乒乓球DNF2
小黃182游泳LOL1
小黃182滑板QQ飛車(chē)2
小黃182跑步戰(zhàn)地五3
小孫181睡覺(jué)劍網(wǎng)三1

所以以上數(shù)據(jù)便是依據(jù)PARTITION BY分組所顯示行號(hào)。

既然已經(jīng)得到這樣的數(shù)據(jù),那么把相同的數(shù)據(jù)更改為空就很簡(jiǎn)單了。使用CASE WHEN便可以實(shí)現(xiàn)。

  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

那么以上語(yǔ)句執(zhí)行最終結(jié)果便是一下表格里的數(shù)據(jù):

ABCDErow
小明181籃球LOL1



乒乓球DNF2
小黃182游泳LOL1



滑板QQ飛車(chē)2



跑步戰(zhàn)地五3
小孫181睡覺(jué)劍網(wǎng)三1

這樣一來(lái)就簡(jiǎn)介多了,SQL SERVER很多內(nèi)置函數(shù)還是非常好用的。

最后放上一個(gè)測(cè)試臨時(shí)表格供大家測(cè)試吧!

  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.    )

插入數(shù)據(jù)

  1. insert INTO #tab select 'HD01','0101520',N'電池出問(wèn)題','102020',2,'102020',2

  2. insert INTO #tab select 'HD01','0101520',N'電池出問(wèn)題','101010',2,'202020',2

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

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

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

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

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

語(yǔ)句查詢(xún)執(zhí)行

  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

以上測(cè)試SQL語(yǔ)句來(lái)自博客園以下老哥的文章,它的文章只編寫(xiě)了SQL語(yǔ)句供予測(cè)試。

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

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

后續(xù)更新

PARTITION BY簡(jiǎn)稱(chēng)分區(qū)函數(shù),GROUP BY為聚合函數(shù)。
  1. PARTITION BY的使用之處可以有很多,文章的上半部分查詢(xún)出來(lái)的數(shù)據(jù)用于報(bào)表非常合適。
    但用作于程序中就會(huì)顯得比較復(fù)雜。
    以此可以思考,既然 PARTITION BY是依據(jù)當(dāng)前字段不同的字段做一個(gè)分組,不影響數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)行。
    結(jié)合ROW_NUMBER對(duì)分組后的數(shù)據(jù)進(jìn)行一個(gè)排序。這樣就可以根據(jù)ROU_NUMBER后的字段進(jìn)行數(shù)據(jù)查詢(xún)。
    同時(shí),PARTITION BY 還可以在一個(gè)查詢(xún)語(yǔ)句中針對(duì)于多個(gè)字段進(jìn)行查詢(xún)。但后續(xù)的PARTITION BY須攜帶上前一個(gè)字段。
    比如上面例子中再增加一個(gè)字段,父母標(biāo)識(shí)。L字段中,0代表自己,1代表母親,2代表父親。DE就表示父母的愛(ài)好。            

  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. 這樣除了第一次的依據(jù)A,B,C進(jìn)行了一個(gè)內(nèi)部分區(qū)排序,
    隨后第二次操作就會(huì)依據(jù)A,B,C為參照針對(duì)L的不同字段在做一個(gè)內(nèi)部分區(qū)排序。數(shù)據(jù)就是下面的樣式

ABCLDE
小明1810籃球LOL




乒乓球DNF



2籃球吃雞




跳傘黎明殺機(jī)



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




滑板QQ飛車(chē)




跑步戰(zhàn)地五
小孫181
睡覺(jué)劍網(wǎng)三

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



點(diǎn)晴模切ERP更多信息:http://moqie.clicksun.cn,聯(lián)系電話(huà):4001861886

該文章在 2023/3/20 16:15:26 編輯過(guò)
關(guān)鍵字查詢(xún)
相關(guān)文章
正在查詢(xún)...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專(zhuān)業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車(chē)隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類(lèi)企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷(xiāo)售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶(hù)的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved