Как получить данные в CTE и выполнить обновление - PullRequest
1 голос
/ 27 мая 2020

Используя MS SQL Server, я хочу:

  1. Получить данные из моего приложения
  2. Выполнить предварительную обработку
  3. Обновить таблицу

Шаги 1 и 3 вызывают у меня проблемы.

Если упростить проблему до ее сути, мои существующие данные выглядят так:

+--------+-------+
|  Item  | Usage |
+--------+-------+
| Part A |    10 |
| Part B |    15 |
| Part C |     8 |
+--------+-------+

, а пример исходных данных:

+--------+
|  Item  |
+--------+
| Part A |
| Part B |
| Part B |
| Part B |
| Part A |
| Part A |
+--------+

Мой общий план состоит в том, чтобы импортировать данные в CTE, выполнить предварительную обработку, а затем выполнить обновление.

Что касается получения данных, поскольку "INTO" не допускается в CTE, как мне получить исходные данные в CTE. Или какой-то другой подход, не использующий CTE лучше?

Предварительная обработка проста. Вот мой SQL:

WITH MyData (Item, NewUsage)
AS
(
    <Somehow get the data>
    SELECT Item, Count(*) as NewUsage
    FROM Items
    GROUP BY Item
)
UPDATE Items
SET Usage = Usage + b.NewUsage
FROM Items as a JOIN MyData as b ON a.Item = b.Item;

Обновление обновляет все строки в Items на 1 вместо использования столбца NewUsage.

Как мне получить свои данные (в CTE ?) и как написать SQL, чтобы он работал правильно?

...