时间表结果到变量不起作用

问题描述

Im托盘将时间表的结果设置为变量,这就是我做错了吗?

WITH Consolidado_B (CANTIDAD,CALIDAD) AS(
    select 
        SUM(cbs) [Cantidad],'BLANCOS' CALIDAD
    from CBases c
    inner join v_Bases v on v.CODIGO=c.basecodi
    where v.[NOMBRE COMPLeto] like '%blanco%' and
    c.colorcodi=@COLORCODI
    union
    select
        SUM(cbs),'ACCENT'
    from CBases c
    inner join v_Bases v on v.CODIGO=c.basecodi
    where v.[NOMBRE COMPLeto] like '%Acce%' 
    and c.colorcodi=@COLORCODI
)
SET @TOTALBASES=
(
SELECT sum(CANTIDAD) TOTAL 
FROM Consolidado_B
)

解决方法

因为您没有提及它,所以我猜错误消息是:子查询返回了多个值。或未定义Consolidado_B。

CTE必须与select语句一起使用,而不能与SET语句分开。

尝试一下:

    printf("List is: ");
    INT_LIST *trvPtr = start;
    while (trvPtr != NULL) {
        printf("%d ",trvPtr->number);
        trvPtr = trvPtr->next;
    }
    puts("");
,

使用只能使用SELECT。但这会更简单:

select @TOTALBASES = SUM(cbs) 
from CBases c join
     v_Bases v
     on v.CODIGO=c.basecodi
where c.colorcodi = @COLORCODI or
      (v.[NOMBRE COMPLETO] like '%blanco%'  or v.[NOMBRE COMPLETO] like '%Acce%') ;

如果[NOMBRE COMPLETO]可以同时满足这两个条件,则这不是100%等效的-您实际上希望对它们进行两次计数。但是,它的效率要高得多。在这种情况下,可以对查询进行调整以解决此问题-无需使查询复杂化。