仅显示带有分区依据的最大行的值?

时间:2019-02-07 09:29:47

标签: sql-server null max row partition-by

标题可能有点小,但是我试图删除一行的值而不删除实际的行。

这是我的桌子:

SELECT ID,CustomerID,Weight FROM Orders

enter image description here

我要完成的工作是:

enter image description here

ID MAX() CustomerID Group By值将为我提供Weight中的空值,其中max和group by为未设置

是否可以一行完成此操作? partiton by

类似的东西:

SELECT MAX(ID) over (partition by CustomerID,Weight)....我知道这是错误的,但如果可能的话,如果没有联接或CTE,并且仅在select语句中的一行中这样做会很棒。

3 个答案:

答案 0 :(得分:1)

一种可能的方法是使用ROW_NUMBER

SELECT 
    ID,
    CustomerID,
    CASE 
        WHEN ROW_NUMBER() OVER (PARTITION BY CustomerId ORDER BY ID DESC) = 1 THEN [Weight]
        ELSE Null
    END AS [Weight]
FROM #Orders
ORDER BY ID

输入:

CREATE TABLE #Orders (
    ID int,
    CustomerID int,
    [Weight] int
)
INSERT INTO #Orders
    (ID, CustomerID, [Weight])
VALUES
    (1, 11, 100),
    (2, 11, 17),
    (3, 11, 35),
    (4, 22, 26),
    (5, 22, 78),
    (6, 22, 10030)

输出:

ID  CustomerID  Weight
1   11          NULL
2   11          NULL
3   11          35
4   22          NULL
5   22          NULL
6   22          10030

答案 1 :(得分:0)

尝试一下

Security.addProvider(new BouncyCastleProvider());

答案 2 :(得分:0)

您可以尝试一下。

SELECT ID,CustomerId,CASE WHEN ID= MAX(ID) OVER(PARTITION BY CustomerId) THEN Weight ELSE NULL END AS Weight FROM Orders