SQL Server-使用UNION进行变量赋值

SQL Server-使用UNION进行变量赋值,sql,sql-server,Sql,Sql Server,我试图使用UNION ALL分配变量值,但收到错误: 在包含top的语句中不允许变量赋值 标高并集、相交或除运算器 如何使用并集指定值?下面是我试图创建的sql: SELECT @Totals = SUM(Quantity) FROM ConsData A WITH(NOLOCK) INNER JOIN #TmpData B ON B.DataId = A.DataId INNER JOIN Data cp ON cp.DataId = A.DataId

我试图使用UNION ALL分配变量值,但收到错误:

在包含top的语句中不允许变量赋值 标高并集、相交或除运算器

如何使用并集指定值?下面是我试图创建的sql:

SELECT @Totals = SUM(Quantity)      
  FROM ConsData A WITH(NOLOCK)      
INNER JOIN #TmpData B ON B.DataId = A.DataId 
INNER JOIN Data cp ON cp.DataId = A.DataId           
 WHERE A.Status = -1 AND cp.Date IS NOT NULL
UNION ALL
SELECT @Totals = cg.Total  
        FROM ConsDataGenerated cg
            INNER JOIN #TmpData B ON B.DataId = cg.DataId
            INNER JOIN Data cp ON cp.DataId = B.DataId
        WHERE cp.Date IS NULL   

试试这样的

DECLARE @Totals1 INT, @Totals2 INT, @GrandTotal INT;

SELECT @Totals1 = SUM(Quantity)      
FROM ConsData A WITH(NOLOCK)      
INNER JOIN #TmpData B ON B.DataId = A.DataId 
INNER JOIN Data cp ON cp.DataId = A.DataId           
WHERE A.Status = -1 AND cp.Date IS NOT NULL


SELECT @Totals2 = cg.Total    --<-- Assuming this returns a Scalar value
FROM ConsDataGenerated cg
INNER JOIN #TmpData B ON B.DataId = cg.DataId
INNER JOIN Data cp ON cp.DataId = B.DataId
WHERE cp.Date IS NULL  

SELECT @GrandTotal = ISNULL(@Totals1, 0) + ISNULL(@Totals2, 0);

我假设@Totals是一个标量变量,那么你如何给它分配两个不同的值呢?不清楚你期望@Totals有什么值,因为你有两个辅助条件,你考虑过使用集合而不是选择,或者通过将顶级联合包装到另一个select中来删除它?使用两个变量并将它们相加?首先,2个select没有意义。这是逻辑上的胡说八道。其次,我不提供基本的SQL建议——我遵循人们应该阅读文档的思想流派。我告诉过你该怎么做,找出一个select的FROM可以是另一个select——确切的语法——是你的责任。