从结果集中消除部分重复行

2023-01-02数据库问题
0

本文介绍了从结果集中消除部分重复行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我有一个查询,它返回一个类似于下面的结果集(实际上它要大得多,有数千行):

<前>一个 |乙 |C |D-----|----|----|-----1 空 |d0 |d0 |空值2 空 |d0 |d1 |空值3 空 |d0 |d2 |04 d0 |d1 |d1 |空值5 d0 |d2 |d2 |0

其中两行被认为是重复的,1 和 2,因为 A、B 和 D 是相同的.为了消除这种情况,我可以使用 SELECT DISTINCT A, B, D 但是我的结果集中没有得到 C 列.C列是第3、4、5行的必要信息.

那么我如何从上面的结果集到这个(C4中出现的结果也可以是NULL而不是d1):

<前>一个 |乙 |C |D-----|----|------|-----1 空 |d0 |空 |空值3 空 |d0 |d2 |04 d0 |d1 |d1 |空值5 d0 |d2 |d2 |0

解决方案

DECLARE @YourTable TABLE (一个 VARCHAR(2), B VARCHAR(2), C VARCHAR(2), D VARCHAR(2))INSERT INTO @YourTable VALUES (NULL, 'd0', 'd0', NULL)INSERT INTO @YourTable VALUES (NULL, 'd0', 'd1', NULL)INSERT INTO @YourTable VALUES (NULL, 'd0', 'd2', 'a0')INSERT INTO @YourTable VALUES ('d0', 'd1', 'd1', NULL)插入@YourTable 值('d0'、'd2'、'd2'、'a0')选择 A、B、C = MIN(C)、D从@YourTable按 A、B、D 分组

<小时>

SELECT A, B, CASE WHEN MIN(C) = MAX(C) THEN MIN(C) ELSE NULL END, D从@YourTable按 A、B、D 分组

<小时>

SELECT A, B, CASE WHEN(COALESCE(C, 'dx')) = MAX(COALESCE(C, 'dx')) THEN MIN(C) ELSE NULL END, D从@YourTable按 A、B、D 分组

I have a query that returns a result set similar to the one below (in reality it is far bigger, thousands of rows):

     A    | B  | C  |    D
     -----|----|----|-----
1    NULL | d0 | d0 | NULL
2    NULL | d0 | d1 | NULL
3    NULL | d0 | d2 |   a0
4      d0 | d1 | d1 | NULL
5      d0 | d2 | d2 |   a0

Two of the rows are considered duplicates, 1 and 2, because A, B and D are the same. To eliminate this, I could use SELECT DISTINCT A, B, D but then I do not get column C in my result set. Column C is necessary information for rows 3, 4 and 5.

So how do I come from the result set above to this one (the result appearing in C4 can also be NULL instead of d1):

     A    | B  | C    | D
     -----|----|------|-----
1    NULL | d0 | NULL | NULL
3    NULL | d0 | d2   |   a0
4      d0 | d1 | d1   | NULL
5      d0 | d2 | d2   |   a0

解决方案

DECLARE @YourTable TABLE (
  A VARCHAR(2)
  , B VARCHAR(2)
  , C VARCHAR(2)
  , D VARCHAR(2))

INSERT INTO @YourTable VALUES (NULL, 'd0', 'd0', NULL)
INSERT INTO @YourTable VALUES (NULL, 'd0', 'd1', NULL)
INSERT INTO @YourTable VALUES (NULL, 'd0', 'd2', 'a0')
INSERT INTO @YourTable VALUES ('d0', 'd1', 'd1', NULL)
INSERT INTO @YourTable VALUES ('d0', 'd2', 'd2', 'a0')


SELECT A, B, C = MIN(C), D
FROM @YourTable
GROUP BY A, B, D


SELECT A, B, CASE WHEN MIN(C) = MAX(C) THEN MIN(C) ELSE NULL END, D
FROM @YourTable
GROUP BY A, B, D


SELECT A, B, CASE WHEN MIN(COALESCE(C, 'dx')) = MAX(COALESCE(C, 'dx')) THEN MIN(C) ELSE NULL END, D
FROM @YourTable
GROUP BY A, B, D

这篇关于从结果集中消除部分重复行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

Mysql目录里的ibtmp1文件过大造成磁盘占满的解决办法
ibtmp1是非压缩的innodb临时表的独立表空间,通过innodb_temp_data_file_path参数指定文件的路径,文件名和大小,默认配置为ibtmp1:12M:autoextend,也就是说在文件系统磁盘足够的情况下,这个文件大小是可以无限增长的。 为了避免ibtmp1文件无止境的暴涨导致...
2025-01-02 数据库问题
151

按天分组的 SQL 查询
SQL query to group by day(按天分组的 SQL 查询)...
2024-04-16 数据库问题
77

SQL 子句“GROUP BY 1"是什么意思?意思是?
What does SQL clause quot;GROUP BY 1quot; mean?(SQL 子句“GROUP BY 1是什么意思?意思是?)...
2024-04-16 数据库问题
62

MySQL groupwise MAX() 返回意外结果
MySQL groupwise MAX() returns unexpected results(MySQL groupwise MAX() 返回意外结果)...
2024-04-16 数据库问题
13

MySQL SELECT 按组最频繁
MySQL SELECT most frequent by group(MySQL SELECT 按组最频繁)...
2024-04-16 数据库问题
16

在 Group By 查询中包含缺失的月份
Include missing months in Group By query(在 Group By 查询中包含缺失的月份)...
2024-04-16 数据库问题
12