删除SQL Server中的第二行或相同的数字

Cap*_*n16 3 sql t-sql sql-server sql-server-2008

我正在使用SQL Server.我使用了这段代码:

 select distinct A.CustomerNo, A.INV_Nr, B.Code, A.Price 
 from INVOICE A.
      INVOICE_LINE B
 where
      A.IVC_Nr = B.IVC_Nr
Run Code Online (Sandbox Code Playgroud)

输出是这样的:

| CustomerNo   |    INV_Nr   |   Code   | Price |
=================================================
| 1100021      |    500897   |   1404   | 2500  |
| 1100021      |    500897   |   1403   | 2500  |
| 1100022      |    500898   |   1405   | 3500  |
| 1100023      |    500899   |   1405   | 3000  |
| 1100023      |    500899   |   1403   | 3000  |
Run Code Online (Sandbox Code Playgroud)

如何删除第二行并仅获取相同数字的第一行,并且应该如下所示:

| CustomerNo   |    INV_Nr   |   Code   | Price |
=================================================
| 1100021      |    500897   |   1404   | 2500  |
| 1100022      |    500898   |   1405   | 3500  |
| 1100023      |    500899   |   1405   | 3000  |
Run Code Online (Sandbox Code Playgroud)

谢谢,

Joh*_*Woo 6

由于问题是标记SQL Server 2005+,您可以使用Common Table ExpressionWindow Function此.

WITH recordsList
AS
(
    SELECT  A.CustomerNo, A.INV_Nr, B.Code, A.Price ,
            ROW_NUMBER() OVER (PARTITION BY A.CustomerNo
                                ORDER BY B.Code DESC) rn
    FROM    INVOICE A
            INNER JOIN INVOICE_LINE B
                ON A.IVC_Nr = B.IVC_Nr
)
SELECT  CustomerNo, INV_Nr, Code, Price
FROM    recordsList
WHERE   rn = 1
Run Code Online (Sandbox Code Playgroud)