SQL 2008 VS 2012错误:关键字';计算';
我的朋友向我发送了他在Server2008中编写的命令,这些命令没有问题,但是我的从副本和过去的命令在2012中不起作用。有什么原因吗?代码如下:SQL 2008 VS 2012错误:关键字';计算';,sql,sql-server,sql-server-2008,tsql,sql-server-2012,Sql,Sql Server,Sql Server 2008,Tsql,Sql Server 2012,我的朋友向我发送了他在Server2008中编写的命令,这些命令没有问题,但是我的从副本和过去的命令在2012中不起作用。有什么原因吗?代码如下: Use Kudler_Database SELECT AccountNumber, [Description], ShortDescription,Balance FROM Chart_of_Accounts ORDER BY left (AccountNumber, 2)
Use Kudler_Database
SELECT AccountNumber, [Description], ShortDescription,Balance
FROM Chart_of_Accounts
ORDER BY left (AccountNumber, 2)
COMPUTE SUM(Balance) BY left (AccountNumber, 2)
COMPUTE SUM(Balance);
以下是错误:
消息156,级别15,状态1,第6行关键字附近语法不正确
“计算”
COMPUTE
在SQL server 2012中不再可用,这就是为什么会出现该错误。见本页:
您可以使用分组集创建类似的内容,但这些内容都包含在一个结果集中,例如:
SELECT AcGroup, AccountNumber, [Description], ShortDescription, SUM( Balance ) Balance, GROUPING_ID(AcGroup, AccountNumber)
FROM ( SELECT LEFT( AccountNumber, 2 ) AcGroup, * FROM Chart_of_Accounts ) x
GROUP BY GROUPING SETS( (AcGroup), ( AccountNumber, [Description], ShortDescription ), () )
SELECT AcGroup, SUM( Balance ) Balance
FROM ( SELECT LEFT( AccountNumber, 2 ) AcGroup, * FROM Chart_of_Accounts ) x
GROUP BY GROUPING SETS( AcGroup, () )
SELECT AcGroup, SUM( Balance ) Balance
FROM ( SELECT LEFT( AccountNumber, 2 ) AcGroup, * FROM Chart_of_Accounts ) x
GROUP BY AcGroup WITH CUBE
我添加了GROUPING_ID(),这样可以更容易地确定源代码是否是原始的汇总行
我一直想知道你会怎么消费这样的东西,因为多个结果集让它很难处理。您不能将其传递到另一个存储过程,也不能将其复制并直接粘贴到Excel(而不会弄乱),传递到.net客户端会很尴尬。您是如何使用以前的代码的
HTH是一种自Compute By以来的具有汇总功能的黑客 结果
AccountNumber Balance total
1234567890 2000 2000
1234567890 4000 4000
1234567890 NULL 6000
2345678901 3000 3000
2345678901 NULL 3000
NULL NULL 9000
或
您可以使用下面的
DECLARE @t TABLE(AccountNumber VARCHAR(10),[Description] VARCHAR(100),ShortDescription VARCHAR(100),Balance INT)
INSERT INTO @t SELECT '1234567890','Some Description for 1st Account','Short Description for 1st Account',2000 Union All
SELECT '2345678901','Some Description for 2nd Account','Short Description for 2nd Account',3000 Union All
SELECT '1234567890','Some Description for 1st Account','Short Description for 1st Account',4000
;With CTE AS
(
SELECT
AccountNumber
,[Description]
,ShortDescription
,Balance
,SubTotal = SUM(Balance) OVER (PARTITION BY AccountNumber ORDER BY LEFT (AccountNumber, 2))
,Rn = ROW_NUMBER() OVER(PARTITION BY AccountNumber ORDER BY LEFT (AccountNumber, 2))
FROM @t)
SELECT
AccountNumber
,[Description]
,ShortDescription
,Balance = CAST(Balance AS VARCHAR(10))
,SubTotal = CASE WHEN Rn != 1 THEN NULL ELSE SubTotal END
FROM CTE
UNION ALL
SELECT
' ', ' ',' ' ,'Total Amount' , SUM(Balance) FROM CTE
输出为
AccountNumber Description ShortDescription Balance SubTotal
1234567890 Some Description for 1st Account Short Description for 1st Account 2000 6000
1234567890 Some Description for 1st Account Short Description for 1st Account 4000 NULL
2345678901 Some Description for 2nd Account Short Description for 2nd Account 3000 3000
Total Amount 9000
这是它谈论的第一个计算@BigDaddyCardona的可能重复,这是页面上说的,您可以在下面找到它:
Transact-SQL语法| compute/compute BY
好吧,我看到很晚了,很抱歉,但到时候如何修复计算?它不提供解决方案,只需使用汇总即可。我试过了,但没有成功。你会如何使用汇总重写这个?我对这个和SQL都是新手。@BigdadyCardona,请在下面找到我的答案。它可能会帮助你继续。很抱歉迟了答复
AccountNumber Description ShortDescription Balance SubTotal
1234567890 Some Description for 1st Account Short Description for 1st Account 2000 6000
1234567890 Some Description for 1st Account Short Description for 1st Account 4000 NULL
2345678901 Some Description for 2nd Account Short Description for 2nd Account 3000 3000
Total Amount 9000