#sql-server #variables
Вопрос:
DECLARE @temp_table TABLE(
category_id INT IDENTITY(1,1),
category_name VARCHAR(100)
)
INSERT INTO @temp_table
SELECT DISTINCT category.category_name
FROM category
SELECT *
FROM @temp_table
LEFT JOIN (
SELECT SUM(year_total) 'total', cat_a_id
FROM fin_transactions
GROUP BY cat_a_id
) AS table_1
ON table_1.cat_a_id = @temp_table.category_id
Я получаю ошибку в последней строке, где я «Должен объявить скалярную переменную «@temp_table»», но, как ни странно, ни в каких других случаях я ссылался на @temp_table. Также кажется, что я объявил об этом в строке 1
Комментарии:
1. Почему ты не пользуешься
Alias
@temp_table
этим ?2. Используйте псевдоним таблицы. Или измените
ON
условие наtable_1.cat_a_id = [@temp_table].category_id
3. Ошибка пытается намекнуть на проблему. В этом положении он интерпретируется
@something
как имя скалярной переменной, а не табличной переменной.4. Как вы думаете, почему здесь полезна табличная переменная? И почему вы используете DISTINCT, когда, основываясь на названии, эти строки должны быть уникальными в исходной таблице (категории)?
Ответ №1:
Используйте «Псевдоним» после FROM @temp_table
, и это сработает
DECLARE @temp_table TABLE(
category_id INT IDENTITY(1,1),
category_name VARCHAR(100)
)
INSERT INTO @temp_table
SELECT DISTINCT category.category_name
FROM category
SELECT *
FROM @temp_table t --here changed
LEFT JOIN (
SELECT SUM(year_total) 'total', cat_a_id
FROM fin_transactions
GROUP BY cat_a_id
) AS table_1
ON table_1.cat_a_id = t.category_id --and here changed
Комментарии:
1. @alangap23, пожалуйста, примите мой ответ, если он был полезен.