简体   繁体   English

SQL Server查询以查找按一列分组但在其他至少一列中不同的值

[英]SQL server query to find values grouped by one column but different in at least one of other columns

Please pardon the title of my question - 请原谅我的问题的标题-

I have a table 我有桌子

TRXN (ID,ACCT_NUM,TRAN_MEMO,AMOUNT,DATE,LRN)

I want to write a query to pull records which have same LRN but atleast one of the other column has different value. 我想编写一个查询来拉取具有相同LRN但其他列中的至少一个具有不同值的记录。 Is it possible? 可能吗?

In my answer I consider you have unique value for ID and exclude it. 在我的回答中,我认为您具有唯一的ID值并将其排除。

Table created: 创建的表:

CREATE TABLE #TRXN (ID INT IDENTITY(1, 1)
                    ,ACCT_NUM INT
                    ,TRAN_MEMO INT
                    ,AMOUNT INT
                    ,[DATE] DATE
                    ,LRN INT
)

Sample data inserted 插入样本数据

INSERT INTO #TRXN VALUES (1, 2, 2, '1 jan 2000', 2)
                        ,(2, 2, 2, '2 jan 2000', 2)
                        ,(1, 2, 2, '1 jan 2000', 2)
                        ,(1, 2, 2, '1 jan 2000', 3)

Have same LRN but at least one of the other column has different value 具有相同的LRN,但另一列中至少有一个具有不同的值

;WITH C AS(
    SELECT ROW_NUMBER() OVER (PARTITION BY ACCT_NUM, TRAN_MEMO, AMOUNT, [DATE], LRN ORDER BY ACCT_NUM, TRAN_MEMO, AMOUNT, [DATE], LRN) AS Rn
           ,ID, ACCT_NUM, TRAN_MEMO, AMOUNT, [DATE], LRN
    FROM #TRXN WHERE LRN IN(
    SELECT LRN FROM #TRXN GROUP BY LRN HAVING COUNT(ID) > 1)
)
SELECT ID, ACCT_NUM, TRAN_MEMO, AMOUNT, [DATE], LRN
FROM C WHERE Rn = 1

Output: 输出:

ID ACCT_NUM TRAN_MEMO AMOUNT DATE        LRN
---------------------------------------------
1  1        2         2      2000-01-01  2
2  2        2         2      2000-01-02  2

why simply, use group by: 为什么简单地使用group by:

 SELECT COUNT(1) AS numberOfGroupedRows,ID,ACCT_NUM,TRAN_MEMO,AMOUNT,DATE,LRN
 FROM TRNX GROUP BY ID,ACCT_NUM,TRAN_MEMO,AMOUNT,DATE,LRN

since group by it will group all similar rows in one row 因为按分组将所有相似的行分组为一行

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 SQL 服务器 - 根据其他列的值更新一列 - SQL server - Update one column based on the values of other columns 在同一表中的一列上查找不同值的 SQL 查询 - SQL query which find different values on one column in the same table SQL查询以查找具有至少一个指定值的行 - SQL query to find rows with at least one of the specified values 如何根据 SQL Server 中的另一列将一列值转换为两个不同的列值? - How to convert one column values to two different column values based on other column in SQL Server? SQL Server 查询至少比当前日期小一个日期的分组记录 - SQL Server Query on grouped records with having at least one date lesser than current date 如何在SQL中间隙不超过3的其他列中的一列上查找元素 - How to find elements on one column for values in other columns having no more than 3 gap in SQL sql查询从其中其他值列相同的一列中提取值 - sql query for extracting values from one column where other value columns are same SQL查询以在一个表中查找重复项,但前提是至少有一个重复项具有位于不同表中的约会 - SQL Query to find duplicates in one table but only if at least one of the duplicates has an appointment which is in a different table 一列在不同列中的值 - Values of one column in different columns SQL Server查询以查找具有聚合功能的记录在一列中但在select子句中有多列 - SQL Server Query to find records with aggregate funct on one column but multiple columns in select clause
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM