简体   繁体   中英

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. Is it possible?

In my answer I consider you have unique value for ID and exclude it.

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

;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:

 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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM