0

标题可能有点偏离,但是我正在尝试删除一行的值而不删除实际行。

这是我的桌子:

SELECT ID,CustomerID,Weight FROM Orders

在此处输入图像描述

我想要完成的是:

在此处输入图像描述

ID CustomerIDMAX()值将在未设置 max 和 group by时为我提供空值 Group By Weight

是否有可能在一行中做到这一点?有一个partiton by

就像是:

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

4

3 回答 3

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
于 2019-02-07T09:51:44.517 回答
0

试试这个

;WITH CTE
AS
(
    SELECT
        MAX_ID = MAX(ID) OVER(PARTITION BY CustomerId),
        ID,
        CustomerId,
        Weight
        FROM Orders
)
SELECT
    ID,
    CustomerId,
    Weight = CASE WHEN ID = MAX_ID THEN Weight ELSE NULL END
    FROM CTE
于 2019-02-07T09:32:47.020 回答
0

你可以试试这个。

SELECT ID,CustomerId,CASE WHEN ID= MAX(ID) OVER(PARTITION BY CustomerId) THEN Weight ELSE NULL END AS Weight FROM Orders
于 2019-02-07T09:49:08.990 回答