SQL: обновление столбца на основе результатов подзапроса - PullRequest
1 голос
/ 21 января 2012

У меня есть таблица T-SQL, которая содержит следующие столбцы: Date, StationCode, HDepth и MaxDepth.Каждая строка в столбце MaxDepth по умолчанию установлена ​​в 0.Я пытаюсь найти максимальный HDepth по дате и StationCode и обновить MaxDepth до столбца в этих строках.Я написал инструкцию SELECT, чтобы найти, где происходят максимумы, и это:

SELECT StationCode, [Date], MAX(HDepth) AS Maximum FROM dbo.[DepthTable] GROUP BY [Date], StationCode

Как я могу поместить этот запрос в оператор обновления, чтобы установить для MaxDepth значение 1 в строках, возвращаемых этим запросом

1 Ответ

2 голосов
/ 21 января 2012

Вы можете попробовать что-то вроде этого:

UPDATE a
SET MaxDepth = 1
FROM dbo.[DepthTable] AS a
    JOIN (
        -- Your original query
        SELECT StationCode, [Date], MAX(HDepth) AS Maximum
        FROM dbo.[DepthTable]
        GROUP BY [Date], StationCode
    ) AS b ON a.StationCode = b.StationCode
        AND a.[DATE] = b.[DATE]
        AND a.HDepth = b.Maximum -- Here we get only the max rows

Однако, если столбец просто основан на других столбцах, вы можете подумать о том, чтобы поместить эту логику в представление (чтобы избежать обновления аномалий ). Выбор для такого представления может выглядеть так:

SELECT a.[Date], a.StationCode, a.HDepth,
    CASE WHEN b.Maximum IS NULL THEN 0 ELSE 1 END AS MaxDepth
FROM dbo.[DepthTable] AS a
    LEFT JOIN (
        -- Your original query
        SELECT StationCode, [Date], MAX(HDepth) AS Maximum
        FROM dbo.[DepthTable]
        GROUP BY [Date], StationCode
    ) AS b ON a.StationCode = b.StationCode
        AND a.[DATE] = b.[DATE]
        AND a.HDepth = b.Maximum -- Here we get only the max rows
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...