在 PIVOT SQL 之后未运行第二个选择查询

Posted

技术标签:

【中文标题】在 PIVOT SQL 之后未运行第二个选择查询【英文标题】:Second select query not running after a PIVOT SQL 【发布时间】:2021-06-07 14:43:17 【问题描述】:

所以基本上我有一个类似于这个的代码执行存储过程

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

我正在尝试找到一种方法来成功运行整个查询,而不会在第二个查询的第一次运行时出错并且必须单独运行查询。

错误是

列名“列名”无效

【问题讨论】:

尝试将go 放在两个查询之间,这样它们就不会在同一个批次中。 现在不显示错误了!唯一的问题是,由于现在是一个存储过程,它只运行第一部分!我将进行编辑以澄清该细节!谢谢! 你为什么要删除并重新创建? 因为这个表在其他存储过程中也是用来传输数据的!所以我可以在另一个查询中进行操作,例如枢轴中的列不会让我! 【参考方案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

【讨论】:

以上是关于在 PIVOT SQL 之后未运行第二个选择查询的主要内容,如果未能解决你的问题,请参考以下文章

存在查询未产生预期结果时的 T-SQL 案例

选择数据并在所选记录中查找重复值的 sql 查询

ASP.NET MVC 多选列表框值未呈现

sql 从表中选择未出现在第二个表中的所有内容

oracle行转列sql怎么写?

SQL 中的 PIVOT 给出错误 - ORA-00933: SQL 命令未正确结束