问题描述
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%等效的-您实际上希望对它们进行两次计数。但是,它的效率要高得多。在这种情况下,可以对查询进行调整以解决此问题-无需使查询复杂化。