Используя MS SQL Server, я хочу:
- Получить данные из моего приложения
- Выполнить предварительную обработку
- Обновить таблицу
Шаги 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, чтобы он работал правильно?