Второй выберите запрос, который не выполняется после СВОДНОГО SQL

#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
 

Дело в том, что когда я пытаюсь выполнить второй запрос, он показывает ошибку в столбцах.

Этого не произойдет, если я выполню код отдельно.

Например:

  1. Запускаем сначала верхнюю часть
 DROP TABLE IF EXISTS [TempTable]

SELECT [Item1], [Item2], [Item3] 
INTO [TempTable]
FROM [Table1] K 
INNER JOIN [Table2] C
WHERE [Item3] = @timeVariable
GROUP BY [Item1];
 
  1. Затем весь код
 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