Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server在减法运算中靠近“-”的语法不正确_Sql_Sql Server - Fatal编程技术网

SQL Server在减法运算中靠近“-”的语法不正确

SQL Server在减法运算中靠近“-”的语法不正确,sql,sql-server,Sql,Sql Server,我有两个MS SQL Server查询,当分别运行时,会生成正确的结果,但当我尝试从一个查询中减去另一个查询时,会收到错误: Incorrect syntax near '-'. 有什么想法吗?我一遍又一遍地数括号,但我可能完全遗漏了什么 完整的查询是: GO declare @oldDate DATETIME = '3/31/2014'; declare @newDate DATETIME = '5/1/2014'; (SELECT COALESCE(SUM([Revenue]), 0)

我有两个MS SQL Server查询,当分别运行时,会生成正确的结果,但当我尝试从一个查询中减去另一个查询时,会收到错误:

Incorrect syntax near '-'.
有什么想法吗?我一遍又一遍地数括号,但我可能完全遗漏了什么

完整的查询是:

GO
declare @oldDate DATETIME = '3/31/2014';
declare @newDate DATETIME = '5/1/2014';

(SELECT COALESCE(SUM([Revenue]), 0) FROM [authmanager2].[dbo].[cboyd_monthly_finance_funnel]
WHERE [Opp_ID] IN (
    -- Select everything in the new date
    SELECT [Opp_ID] FROM [authmanager2].[dbo].[cboyd_monthly_finance_funnel]
    WHERE [Stage] = '6. Upside' 
    AND ([Status] = 'Won - Not Booked' OR [Status] = 'Open') AND [Report_Date] = @newDate

    Except
    -- everything in the old date
    (SELECT [Opp_ID] FROM [authmanager2].[dbo].[cboyd_monthly_finance_funnel]
    WHERE [Stage] = '6. Upside' 
    AND ([Status] = 'Won - Not Booked' OR [Status] = 'Open') AND [Report_Date] = @oldDate
    Union
    -- everything that was a new item
    SELECT [Opp_ID] FROM [authmanager2].[dbo].[cboyd_monthly_finance_funnel]
        WHERE [Opp_ID] NOT IN (SELECT [Opp_ID] FROM [authmanager2].[dbo].[cboyd_monthly_finance_funnel]
        WHERE [Report_Date] = @oldDate)
    AND [Stage] = '6. Upside' 
    AND ([Status] = 'Won - Not Booked' OR [Status] = 'Open') AND [Report_Date] = @newDate
    Union
    -- everything that was added to upside (stage change)
    SELECT [t].[Opp_ID]
      FROM [authmanager2].[dbo].[cboyd_monthly_finance_funnel][t]
      Join [authmanager2].[dbo].[cboyd_monthly_finance_funnel][s] On [t].[Opp_ID] = [s].[Opp_ID]
      WHERE [t].[Report_Date] = @newDate And [t].[Stage] = '6. Upside'
      And ([t].[Status] = 'Open' Or [t].[Status] = 'Won - Not Booked')
      And ([s].[Stage] = '7. Forecast' And [s].[Report_Date] = @oldDate)
    )
) AND [Report_Date] = @newDate)
-
(SELECT COALESCE(SUM([Revenue]), 0) FROM [authmanager2].[dbo].[cboyd_monthly_finance_funnel]
WHERE [Opp_ID] IN (
    -- Select everything in the old date
    SELECT [Opp_ID] FROM [authmanager2].[dbo].[cboyd_monthly_finance_funnel]
    WHERE [Stage] = '6. Upside' 
    AND ([Status] = 'Won - Not Booked' OR [Status] = 'Open') AND [Report_Date] = @oldDate

    Except
    -- everything that was taken from upside (stage change)
    (-- Select everything in the new date
    SELECT [Opp_ID] FROM [authmanager2].[dbo].[cboyd_monthly_finance_funnel]
        WHERE [Stage] = '6. Upside' 
        AND ([Status] = 'Won - Not Booked' OR [Status] = 'Open') AND [Report_Date] = @newDate
    Union
    SELECT [t].[Opp_ID]
      FROM [authmanager2].[dbo].[cboyd_monthly_finance_funnel][t]
      Join [authmanager2].[dbo].[cboyd_monthly_finance_funnel][s] On [t].[Opp_ID] = [s].[Opp_ID]
      WHERE [t].[Report_Date] = @newDate And [t].[Stage] = '7. Forecast'
      And ([t].[Status] = 'Open' Or [t].[Status] = 'Won - Not Booked')
      And ([s].[Stage] = '6. Upside' And [s].[Report_Date] = @oldDate)
    Union
    -- everything that was booked
    SELECT [s].[Opp_ID]
        FROM [authmanager2].[dbo].[cboyd_monthly_finance_funnel][t]
        Join [authmanager2].[dbo].[cboyd_monthly_finance_funnel][s] On [t].[Opp_ID] = [s].[Opp_ID]
        WHERE [s].[Stage] = '6. Upside' AND [t].[Report_Date] = @newDate And [t].[Status] = 'Closed - Won'
        And [s].[Report_Date] = @oldDate And [s].[Status] != 'Closed - Won'
    Union
    -- everything that went to proposed
    SELECT [t].[Opp_ID]
      FROM [authmanager2].[dbo].[cboyd_monthly_finance_funnel][t]
      Join [authmanager2].[dbo].[cboyd_monthly_finance_funnel][s] On [t].[Opp_ID] = [s].[Opp_ID]
      WHERE [t].[Report_Date] = @newDate And [t].[Stage] = '5. Proposed'
      And ([t].[Status] = 'Open' Or [t].[Status] = 'Won - Not Booked')
      And ([s].[Stage] = '6. Upside' And [s].[Report_Date] = @oldDate)
      And ([s].[Status] = 'Open' Or [s].[Status] = 'Won - Not Booked')
    Union
    -- everything that was lost
    SELECT [s].[Opp_ID]
        FROM [authmanager2].[dbo].[cboyd_monthly_finance_funnel][t]
        Join [authmanager2].[dbo].[cboyd_monthly_finance_funnel][s] On [t].[Opp_ID] = [s].[Opp_ID]
        WHERE [s].[Stage] = '6. Upside' AND [t].[Report_Date] = @newDate And ([t].[Status] = 'Closed - Lost' Or [t].[Status] = 'Inactive')
        And [s].[Report_Date] = @oldDate And ([s].[Status] != 'Closed - Lost' And [s].[Status] != 'Inactive')
    )
) AND [Report_Date] = @oldDate)

你希望结果如何

输入变量或显示在控制台中

试一试

控制台 及


对于一个变量。

我认为问题是当您使用“未预订”时。。我建议使用转义字符,看看效果如何。检查

不能在两个查询之间使用-。在前面加一个select来减去两个标量,或者使用除set减法之外的其他方法。查询是自动生成的吗?所有这些方括号都是空的useless@GordonLinoff他是对的。我是个白痴,因为我把它从我的主要程序中拖了出来,然后重写了它。我这样包装了整件事,但效果不足以回答我自己的问题:从[authmanager2].[dbo].[cboyd_monthly_finance_漏斗]中选择不同的查询1-查询2;我看到的字符串的每一次出现都被单引号包围,因此是字符串文字。
SELECT (QUERY1) - (QUERY2)
DECLARE @myvar INTEGER
SELECT @myvar = (QUERY1) - (QUERY2)