MS SQL Server 實戰 排查多列之間的值是否重復

目錄

需求

范例運行環境

數據樣本設計

功能實現

上傳EXCEL文件到數據庫

SQL語句

小結


需求

在日常的應用中,排查列重復記錄是經常遇到的一個問題,但某些需求下,需要我們排查一組列之間是否有重復值的情況。比如我們有一組題庫數據,主要包括題目和選項字段(如單選選擇項或多選選擇項),一個合理的數據存儲應該保證這些選項列之間不應該出現重復項目數據,比如選項A不應該和選項B的值重復,選項B不應該和選項C的值重復,以此窮舉類推,以保證這些選項之間不會出現重復的值。本文將介紹如何利用group by 、having 語句來實現這一需求,主要實現如下功能:

(1)上傳 EXCEL 版試題題庫到 MS SQL SERVER 數據庫進行導入

(2)通過 union all 將各選項列的數據進行 轉記錄行的合并

(3)通過 group by 語句和 count 聚合函數統計重復情況

(4)通過 having 子句篩選出重復記錄

范例運行環境

操作系統: Windows Server 2019 DataCenter

數據庫:Microsoft SQL Server 2016

.netFramework 4.7.2

數據樣本設計

假設有 EXCEL 數據題庫如下:

如圖我們假設設計了錯誤的數據源,第4題的A選項與D選項重復,第8題的A選項與C選項重復了。

題庫表 [exams] 設計如下:

序號

字段名

類型

說明

備注

1

sortid

int

排序號

題號,唯一性

2

etype

nvarchar

試題類型

如多選、單選

3

etitle

nvarchar

題目

4

A

nvarchar

選項A

5

B

nvarchar

選項B

6

C

nvarchar

選項C

7

D

nvarchar

選項D

功能實現

上傳EXCEL文件到數據庫

導入功能請參閱我的文章《C#實現Excel合并單元格數據導入數據集》這里不再贅述。

SQL語句

首先通過 UNION ALL 將A到D的各列的值給組合成記錄集 a,代碼如下:

	select A as item,sortid from exams  union allselect B as item,sortid from exams  union allselect C as item,sortid from exams  union allselect D as item,sortid from exams  

其次,通過 group by 對 sortid (題號) 和 item (選項) 字段進行分組統計,使用 count 聚合函數統計選項在 題號 中出現的個數,如下封裝:

select item,count(item) counts,sortid from (select A as item,sortid from exams  union allselect B as item,sortid from exams  union allselect C as item,sortid from exams  union allselect D as item,sortid from exams  
) a group by sortid,item order by sortid

最后使用 having 語句對結果集進行過濾,排查出問題記錄,如下語句:

select item,count(item) counts,sortid from (select A as item,sortid from exams  union allselect B as item,sortid from exams  union allselect C as item,sortid from exams  union allselect D as item,sortid from exams  
) a group by sortid,item   having count(item)>1 order by sortid

在查詢分析器運行SQL語句,顯示如下圖:

由此可以看出,通過查詢可以排查出第4題和第8題出現選項重復問題。

小結

我們可以繼續完善對結果的分析,以標注問題序號是哪幾個選項之間重復,可通過如下語句實現:

select case when A=item then 'A' else ''end+
case when B=item then 'B' else '' end +
case when C=item then 'C' else '' end +
case when D=item then 'D' else '' end tip
,b.* from  
(select item,count(item) counts,sortid from (select A as item,sortid from exams  union allselect B as item,sortid from exams  union allselect C as item,sortid from exams  union allselect D as item,sortid from exams  
) a group by sortid,item   having count(item)>1 ) b,exams c where b.sortid=c.sortid

關鍵語句:case when A=item then ‘A’ else ''end+
case when B=item then ‘B’ else ‘’ end +
case when C=item then ‘C’ else ‘’ end +
case when D=item then ‘D’ else ‘’ end tip

這個用于對比每一個選項列,得到對應的選項列名,運行查詢分析器,結果顯示如下:

這樣我們可以更直觀的看到重復的選項列名是哪幾個,以更有效幫助我們改正問題。在實際的應用中每一個環節我們都難免會出現一些失誤,因此不斷的根據實際的發生情況總結經驗,通過計算來分析,將問題扼殺在搖籃里,以最大保證限度的保證項目運行效果的質量。

至此關于排查多列之間重復值的問題就介紹到這里,感謝您的閱讀,希望本文能夠對您有所幫助。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/64455.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/64455.shtml
英文地址,請注明出處:http://en.pswp.cn/web/64455.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

抖去推碰一碰系統技術源碼/open SDK轉發技術開發

抖去推碰一碰系統技術源碼/open SDK轉發技術開發 碰一碰智能系統#碰碰卡系統#碰一碰系統#碰一碰系統技術源頭開發 碰碰卡智能營銷系統開發是一種集成了人工智能和NFC技術的工具,碰碰卡智能營銷系統通過整合數據分析、客戶關系管理、自動化營銷活動、多渠道整合和個…

redis優化

在高并發、高性能、高可用系統中,Redis 的優化至關重要。以下是一些在面試中可以詳細說明的 Redis 優化策略,以及具體的實踐經驗和技術亮點: 1. 數據模型與結構設計優化 使用合適的數據結構 :根據業務需求選擇合適的 Redis 數據結…

WEB攻防-通用漏洞-文件上傳-js驗證-MIME驗證-user.ini-語言特征

目錄 定義 1.前端驗證 2.MIME驗證 3.htaccess文件和.user. ini 4.對內容進行了過濾,做了內容檢測 5.[ ]符號過濾 6.內容檢測php [] {} ; 7.()也被過濾了 8.反引號也被過濾 9.文件頭檢測 定義 文件上傳漏洞是指攻擊者上傳了一個可執行文件(如木馬…

探索與決策的完美結合:Actor-Critic 方法及其衍生算法

引言 在強化學習領域,如何讓智能體學會做出最優決策是一個關鍵問題。Actor-Critic 方法提供了一種高效的解決方案,它結合了策略梯度(Actor)和值函數(Critic)的優點,使智能體能夠在復雜的環境中…

未來網絡技術的新征程:5G、物聯網與邊緣計算(10/10)

一、5G 網絡:引領未來通信新潮流 (一)5G 網絡的特點 高速率:5G 依托良好技術架構,提供更高的網絡速度,峰值要求不低于 20Gb/s,下載速度最高達 10Gbps。相比 4G 網絡,5G 的基站速度…

數據交易和聯邦學習的背景下的安全屬性

數據交易和聯邦學習的背景下的安全屬性 在數據交易和聯邦學習的背景下,安全屬性對于保護數據隱私、確保系統可靠性和維護交易公平性至關重要。以下將分析文章中涉及的安全屬性以及分析這些屬性的目的。 涉及的安全屬性 雙向認證:文章雖未明確提及傳統意義上的雙向認證機制,…

QWT 之 QwtPlotDirectPainter直接繪制

QwtPlotDirectPainter 是 Qwt 庫中用于直接在 QwtPlot 的畫布上繪制圖形的一個類。它提供了一種高效的方法來實時更新圖表,特別適合需要頻繁更新的數據可視化應用,例如實時數據流的顯示。 使用 QwtPlotDirectPainter 的主要優勢在于它可以繞過 QwtPlot 的…

改變HTML元素的方式有哪些?如何在HTML中添加/替換或刪除元素?

使用 JavaScript 的 DOM 操作 如果想要修改元素的樣式,就要先獲取元素之后再進行下一步操作 獲取元素:可以使用等方法獲取到需要操作的 HTML 元素。 document.getElementById() document.getElementsByClassName() document.getElementsByTagName() d…

SuperMap iClient3D for Cesium等高線標注

kele 前言 在三維地形分析中,等高線分析是一種非常重要的分析方法,它能直觀的表達出地形的高低起伏特征,在三維系統中受到廣泛應用。在SuperMap iClient3D for Cesium中,等高線分析是前端GPU分析,能夠分析并渲染出等高…

從 x86 到 ARM64:CPU 架構的進化與未來

在計算機發展的歷史長河中,x86、x64 和 ARM64 這三大主流 CPU 架構各自書寫了輝煌的篇章。它們不僅代表了技術的進步,更承載著無數創新者的夢想與努力。 x86:從 16 位到 32 位的輝煌之路 誕生與崛起 1978 年,英特爾(…

紅魔電競PadPro平板解BL+ROOT權限-KernelSU+LSPosed框架支持

紅魔Padpro設備目前官方未開放解鎖BL,也閹割了很多解鎖BL指令,造成大家都不能自主玩機。此規則從紅魔8開始,就一直延續下來,后續的機型大概率也是一樣的情況。好在依舊有開發者進行適配研究,目前紅魔PadPro平板&#x…

TCP Analysis Flags 之 TCP Out-Of-Order

前言 默認情況下,Wireshark 的 TCP 解析器會跟蹤每個 TCP 會話的狀態,并在檢測到問題或潛在問題時提供額外的信息。在第一次打開捕獲文件時,會對每個 TCP 數據包進行一次分析,數據包按照它們在數據包列表中出現的順序進行處理。可…

<數據集>風力發電機損傷識別數據集<目標檢測>

數據集下載鏈接 <數據集>風力發電機損傷識別數據集<目標檢測>https://download.csdn.net/download/qq_53332949/90187097數據集格式:VOCYOLO格式 圖片數量:2527張 標注數量(xml文件個數):252…

C++ 設計模式:工廠方法(Factory Method)

鏈接:C 設計模式 鏈接:C 設計模式 - 抽象工廠 鏈接:C 設計模式 - 原型模式 鏈接:C 設計模式 - 建造者模式 工廠方法(Factory Method)是創建型設計模式之一,它提供了一種創建對象的接口&#xf…

分布式版本管理工具——Git關聯遠程倉庫(github+gitee)

Git遠程倉庫(Github)的基本使用 一、前言二、Git遠程倉庫介紹三、演示1. 關聯github遠程倉庫2. 關聯gitee(碼云)遠程倉庫3. 重命名遠程倉庫名4. 移除遠程倉庫 四、結束語 一、前言 古之立大事者,不惟有超世之才&#x…

在 React 項目中安裝和配置 Three.js

React 與 Three.js 的結合 :通過 React 管理組件化結構和應用邏輯,利用 Three.js 實現 3D 圖形的渲染與交互。使用這種方法,我們可以在保持代碼清晰和結構化的同時,實現令人驚嘆的 3D 效果。 在本文中,我們將以一個簡…

Lucene 漏洞歷險記:修復損壞的索引異常

作者:來自 Elastic Benjamin Trent 有時,一行代碼需要幾天的時間才能寫完。在這里,我們可以看到工程師在多日內調試代碼以修復潛在的 Apache Lucene 索引損壞的痛苦。 做好準備 這篇博客與往常不同。它不是對新功能或教程的解釋。這是關于花…

嵌入式硬件面試題

1、請問什么是通孔、盲孔和埋孔?孔徑多大可以做機械孔,孔徑多小必須做激光孔?請問激光微型孔可以直接打在元件焊盤上嗎,為什么? 通孔是貫穿整個PCB的過孔,盲孔是從PCB表層連接到內層的過孔,埋孔…

基礎的基礎之 pillow與opencv相比的特點與優缺點比較

Pillow 和 OpenCV 都是人工智能圖像處理的必不可少的常用庫,但它們有各自的特點和適用場景。 以下是它們的主要特點、優缺點以及適用場景的對比: 1. Pillow(Python Imaging Library) Pillow 是一個輕量級的圖像處理庫&#xff0…

深度學習J6周 ResNeXt-50實戰解析

🍨 本文為🔗365天深度學習訓練營中的學習記錄博客🍖 原作者:K同學啊 本周任務: 1.閱讀ResNeXt論文,了解作者的構建思路 2.對比之前介紹的ResNet50V2、DenseNet算法 3.復現ResNeXt-50算法 一、模型結構…