#sql #sql-server #select #pivot
Вопрос:
Так что в принципе у меня есть код, похожий на этот, для выполнения хранимой процедуры:
DROP TABLE IF EXISTS [TempTable]
SELECT [Item1], [Item2], [Item3]
INTO [TempTable]
FROM [Table1] K
INNER JOIN [Table2] C
WHERE [Item3] = @timeVariable
GROUP BY [Item1];
SELECT [Item1], [Item2], [Item3], [Item2]/[Item3] AS Sum1
FROM [TempTable];
GO
Дело в том, что когда я пытаюсь выполнить второй запрос, он показывает ошибку в столбцах.
Этого не произойдет, если я выполню код отдельно.
Например:
- Запускаем сначала верхнюю часть
DROP TABLE IF EXISTS [TempTable]
SELECT [Item1], [Item2], [Item3]
INTO [TempTable]
FROM [Table1] K
INNER JOIN [Table2] C
WHERE [Item3] = @timeVariable
GROUP BY [Item1];
- Затем весь код
DROP TABLE IF EXISTS [TempTable]
SELECT [Item1], [Item2], [Item3]
INTO [TempTable]
FROM [Table1] K
INNER JOIN [Table2] C
WHERE [Item3] = @timeVariable
GROUP BY [Item1];
SELECT [Item1], [Item2], [Item3], [Item2]/[Item3] AS Sum1
FROM [TempTable];
GO
Я пытаюсь найти способ успешно выполнить весь запрос, не получая ошибки при первом запуске во втором запросе и не выполняя запрос отдельно.
Ошибка в том, что
Недопустимое имя столбца «имя столбца»
Комментарии:
1. Попробуйте поместить
go
между двумя запросами, чтобы они не находились в одном пакете.2. Теперь он не показывает ошибку! Единственное, что из-за того, что это хранимая процедура, теперь она запускает только первую часть! Я внесу правку, уточняющую эту деталь! Спасибо!
3. Почему ты все равно бросаешь и воссоздаешь?
4. Потому что эта таблица также используется в других хранимых процедурах для передачи данных! Таким образом, я могу выполнять операции в другом запросе, которые, например, столбцы в сводной таблице мне не позволят!
Ответ №1:
You have use **GROUP BY [Item1]**
Group by user for aggregate like Sum, Avg, Count etc.
If you use Group by then your code should be like below:
DROP TABLE IF EXISTS [TempTable]
SELECT [Item1], SUM([Item2])[Item2], SUM([Item3])Item3
INTO [TempTable]
FROM [Table1] K
INNER JOIN [Table2] C ON K.[Join Column] = C.[Join Column]
WHERE [Item3] = @timeVariable
GROUP BY [Item1];
SELECT [Item1], [Item2], [Item3], [Item2]/[Item3] AS Sum1
FROM [TempTable];
GO
//Here Join Column would be your primary key and foreign key