SQLServer資料庫中處理重覆數據

来源:http://www.cnblogs.com/AsiaCream/archive/2017/01/19/6298586.html
-Advertisement-
Play Games

今天公司編輯部有一妹紙,遇到問題,是需要處理資料庫中重覆的數據,於是想辦法幫忙解決,要求刪除重覆的數據,該表中只有一個欄位,假設為保存的公司名,這是經過多重過濾之後,最終留下的的數據,需要進行篩選,然後重覆的數據只保留一條,最上邊或最下邊的都可以,有且僅有一條,整張表的數據量大概在20W左右,重覆量 ...


今天公司編輯部有一妹紙,遇到問題,是需要處理資料庫中重覆的數據,於是想辦法幫忙解決,要求刪除重覆的數據,該表中只有一個欄位,假設為保存的公司名,這是經過多重過濾之後,最終留下的的數據,需要進行篩選,然後重覆的數據只保留一條,最上邊或最下邊的都可以,有且僅有一條,整張表的數據量大概在20W左右,重覆量多少不清楚,可能很多,可能很少,廢話話不多說,開始解決問題,第一次寫博客,不會排版。

首先,如圖所示,這裡是我假定的數據,

從圖中可以看到,CompanyName表中只有一個名為CName的欄位,裡邊有一些值,模擬處理的數據,可以看到,裡邊有一些重覆的數據,這些就是我們將要處理的數據,處理之後應該是這樣,對應的SQL語句是

 ````SELECT distinct [CName]
FROM [CreamBlog].[dbo].[CompanyName]
where CName in (select CName from CompanyName group by CName having COUNT(CName)>1)

 首先我們需要篩選出重覆的數據,不重覆的就不需要管,然後列出重覆的數據,把上邊查詢中的distinct去掉,就可以找到所有重覆的數據,在後邊一句count(CName)>1這裡進行重覆數據的篩選

經過對比我們可以發現,上圖中的機器人公司是只有一條數據,因此這樣就已經經過一次過濾,然後就是重覆數據的處理,我們假設要把最頂上的信息刪除,如果信息量多,我們比較容易實現,但是現在只有一個欄位,那麼應該如何考慮,在這裡有一個小技巧(個人認為),首先可以在CompanyName的表中新增加一列,這裡設置欄位名為Num(名字隨便起),然後在標識規範中進行設置為自增為1的欄位

然後保存,結果應該是這樣

緊接著,我們用這個Num欄位來進行再一次的過濾,先用之前的方法過濾出來重覆的,然後再把Num欄位中大的值給查詢出來,然後Num小的值留下,當然,也可以把裡邊的Min改為Max,這樣就是把Num小的值查詢出來,把Num大的值留下,如圖

,附上SQL語句
```SELECT [CName],Num
FROM [CreamBlog].[dbo].[CompanyName]
where CName in (select CName from CompanyName group by CName having COUNT(CName)>1)
and Num not in (select Min(Num) from CompanyName group by CName having COUNT(CName)>1),這樣其實已經把所有的重覆的值找了出來,並且把我們想要保留的保存了下來,接著進行刪除操作,首先我們進行查詢,我們最終的結果是什麼樣子,如圖


換成查詢數量,也就是說我們要查出這個數量,就是正確的,這個就是處理結束之後,最終我們想要的結果,這裡是全部處理完之後把多餘的刪除了,重覆數據只保留一條的結果
Select COUNT(*) as count from ( SELECT distinct [CName] FROM [CreamBlog].[dbo].[CompanyName] where CName in (select CName from CompanyName group by CName )) as t1,對於我模擬的數據,最終是6條delete FROM [CreamBlog].[dbo].[CompanyName]
where CName in (select CName from CompanyName group by CName having COUNT(CName)>1)
and Num not in (select Min(Num) from CompanyName group by CName having COUNT(CName)>1),到此為止,整個重覆處理過程就完工了。

總結一下,首先是分組排序,然後找出重覆的,過濾掉單個數據,緊接著過濾掉多個重覆的數據,留下多餘的數據,接著刪除數據。

PS:友情提醒,刪除數據屬於危險行為,刪除前請謹慎操作,先查詢出來,看看是不是自己要刪除的數據,再進行操作,另外,最好留一個備份。



您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 由[OpenDigg](http://www.opendigg.com/) 出品的安卓開源項目周報第六期來啦。我們的安卓開源周報集合了OpenDigg一周來新收錄的優質的[安卓開源項目](http://www.opendigg.com/tags/android),方便安卓開發人員便捷的找到自己需要的... ...
  • NSMutableArray *meiArr = [NSMutableArray arrayWithCapacity:4]; for (int i = 0; i < 4; i++) { NSString *imageName = [NSString stringWithFormat:@"001%d" ...
  • //獲取當前的時間 +(NSString*)getCurrentTimes{ NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; // 設置你想要的格式,hh與HH的區別:分別表示12小時制,24小時制 [formatter se ...
  • Java IO流學習總結一:輸入輸出流 轉載請標明出處:http://blog.csdn.net/zhaoyanjun6/article/details/54292148 本文出自 "【趙彥軍的博客】" Java流類圖結構: 流的概念和作用 流是一組有順序的,有起點和終點的位元組集合,是對數據傳輸的總 ...
  • 有的 App 可能有切換語言的選項,結合系統自動切換最簡單的辦法: 代碼說明: 1、"Localizable" 指的是 Localizable.strings 2、"zh-Hans" 這裡強制指定中文 3、如果強制指定就用上面的代碼,否則可以直接用 NSLocalizedString(key, co ...
  • http://www.cnblogs.com/xusir/archive/2012/12/24/2830957.html ...
  • 概述 昨天下午突然看到,《爐石傳說》游戲資料庫發生宕機並引發數據丟失事故的新聞。剛看到時,滿滿的不可思議。暴雪啊,網易啊。 都是很牛叉的公司。他們出的游戲我都是很喜歡的。 當我看到,第一時間著手搶修,重啟伺服器,並嘗試數據恢復時,我的想法是他們的高可用方案呢?為什麼不馬上切換? 當我看到相關備份數據 ...
  • 介紹 經常會有人問profile工具該怎麼使用?有沒有方法獲取性能差的sql的問題。自從轉mysql我自己也差不多2年沒有使用profile,忽然profile變得有點生疏不得不重新熟悉一下。這篇文章主要對profile工具做一個詳細的介紹;包括工具的用途和使用方法等。profile是SQLServ ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...