#sql #sql-server
#sql #sql-сервер
Вопрос:
У меня есть таблица со столбцами name
и category
:
Имя | Категория |
---|---|
A | Высокая |
b | Средний |
c | Низкий |
Я хотел бы добавить в него еще один столбец и присвоить значения категории с помощью SQL
Желаемый результат:
Имя | Категория | V_Cat |
---|---|---|
A | Высокая | 1 |
B | Средний | 2 |
C | Низкий | 3 |
Я в основном привык к python, а не к SQL какой-либо подсказки? Я использую SQL Server.
Спасибо
Комментарии:
1.
ALTER TABLE [TableX] ADD COLUMN [V_Cat] int NOT NULL DEFAULT 0
.2. Как настроить High = 1 Medium = 2 и Low = 3? в V_cat
3. @sarah похоже, вам нужна отдельная категория таблицы, которая содержит имена категорий и их значения, и в вашей первой таблице добавьте внешний ключ к вашей категории FK_category
Ответ №1:
Одним из простых методов является вычисляемый столбец:
ALTER TABLE TableX ADD V_Cat AS
(CASE Category WHEN 'High' THEN 1 WHEN 'Medium' THEN 2 WHEN 'Low' THEN 1 END);
Обратите внимание, что вы также можете просто использовать CASE
выражение в SELECT
запросе.
Однако, если вы хотите, чтобы они использовались в разных таблицах и были гибкими (чтобы вы могли добавлять дополнительные категории), я бы рекомендовал справочную таблицу. То есть сохраните только v_cat
столбец в своей таблице и создайте другую таблицу со строками, которые они означают.
Ответ №2:
Используйте этот код для ALTER
TableX
:
ALTER TABLE [TableX] ADD [V_Cat] INT NOT NULL DEFAULT 0;
И для присвоения значений, если у вас одинаковый порядок значений по имени, вы можете использовать этот пример:
SELECT [Name], ROW_NUMBER() OVER(ORDER BY [Name]) AS RowNo
INTO #t_res
FROM TableX;
UPDATE X
SET X.V_Cat = t.RowNo
FROM TableX AS X
JOIN #t_res AS t ON t.[Name] = X.[Name];
Это будет работать для большего количества неограниченных записей, которые имеют одинаковый порядок по имени.