Показывать только значения строк Max с разделением на? - PullRequest
0 голосов
/ 07 февраля 2019

заголовок может быть немного неправильным, однако я пытаюсь удалить значения строки, не удаляя фактическую строку.

Это моя таблица:

SELECT ID,CustomerID,Weight FROM Orders

enter image description here

Что я пытаюсь сделать, это:

enter image description here

MAX() значение ID Group By CustomerID , которое даст мне нулевые значения в Weight, где max и group by не установлены

Возможно лисделать это в одну строку?с partiton by?

Что-то вроде:

SELECT MAX(ID) over (partition by CustomerID,Weight).... Я знаю, что это неправильно, но если возможно, обойтись без объединения или CTE и только в одной строке в операторе выбора, который будетбыть великим

Ответы [ 3 ]

0 голосов
/ 07 февраля 2019

Вы можете попробовать это.

SELECT ID,CustomerId,CASE WHEN ID= MAX(ID) OVER(PARTITION BY CustomerId) THEN Weight ELSE NULL END AS Weight FROM Orders
0 голосов
/ 07 февраля 2019

Одним из возможных подходов является использование 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
0 голосов
/ 07 февраля 2019

Попробуйте это

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