如何进行适当的SQL递归?

祖巴贾

我目前正在以下查询中处理一个小错误处理问题:

declare @DayCounter int
declare @rows int
set @DayCounter = -2
set @rows = 0

while @rows = 0
begin
select
  coalesce(p.name, case when len(ol.action)>1 then substring(ol.action,1,40)+'<br />'+substring(ol.action,41,80) else ca.code end) as description
, convert(varchar,DateAdd(minute, 
        15 * ((60 * Datepart(hour, latest_payment_status_change) + 
        Datepart(Minute, latest_payment_status_change)+ 
        Case When DatePart(second, latest_payment_status_change) < 30 
        Then 7 Else 8 End) / 15),
    DateAdd(day, DateDiff(day, 0, latest_payment_status_change), 0)),126) as date_time
, sum(num_of_persons) as num_tickets
from tick_order o
join tick_orderline ol on ol.order_id=o.id
join (
                select  olt.id
                from   tick_orderline_type olt
                join   tick_case ca on ca.id=olt.case_id
                join tick_client tcl on tcl.id = ca.client_id
                where tcl.id = 'CLIENT_TEST'
                union
                select orderline_type_id
                from  rpt_client_orderline_type rcot
                join tick_client tcl on tcl.id = rcot.client_id
                where tcl.id = 'CLIENT_TEST'
                union
                select olt.id
                from   tick_orderline_type olt
                join   rpt_client_case rcc on rcc.case_id=olt.case_id
                join   tick_client cl on cl.id=rcc.client_id
                where  cl.id = 'CLIENT_TEST'
) olt2 on olt2.id=ol.orderline_type_id
join tick_orderline_type olt on olt.id=ol.orderline_type_id
join tick_case ca on ca.id=olt.case_id
join tick_client cl on cl.id=ca.client_id
join tick_user_case uc on uc.case_id=ca.id
join tick_user u on u.id=uc.user_id
left join tick_promotion_code pc on pc.id=o.promotion_code_id
left join tick_promotion p on p.id=pc.promotion_id
where o.latest_payment_status_change>=dateadd(day,@DayCounter,current_timestamp)
and ((o.latest_payment_status_code = 'ORDER_PAYMENT_OK') 
  or (o.latest_payment_status_change > dateadd(minute,30,current_timestamp)
    and o.latest_payment_status_code =  'ORDER_PAYMENT_WAITING' ))
group by 
  coalesce(p.name, case when len(ol.action)>1 then substring(ol.action,1,40)+'<br />'+substring(ol.action,41,80) else ca.code end)
, convert(varchar,DateAdd(minute, 
        15 * ((60 * Datepart(hour, latest_payment_status_change) + 
        Datepart(Minute, latest_payment_status_change)+ 
        Case When DatePart(second, latest_payment_status_change) < 30 
        Then 7 Else 8 End) / 15),
    DateAdd(day, DateDiff(day, 0, latest_payment_status_change), 0)),126)
order by 1,2

set @DayCounter = @DayCounter - 1;

if @@rowcount <> 0
begin
    set @rows = @@rowcount;
    print @DayCounter;
end;
end;

检索到的数据用于显示过去两天每种销售类型的销售额的图表。我现在要实现的目标是:如果过去两天没有任何销售(@@ rowcount = 0),则每次进一步检查一天,直到找到数据为止。现在的查询现在返回类似这样的内容(我尝试使图像正常工作,但是我不知何故无法使用;而是有一个链接):

https://www.dropbox.com/s/0hculuegrc88c69/SQL_Result.png?dl=0

而且它不会停止,因为由于某种原因,尽管查询明确返回了行,但@rows变量仍为0。即使在使用print @@ rowcount时,也会返回行。

那我该如何解决呢?我应该使用完全不同的方法吗?

-齿

祖巴贾

看来我不太了解我的雇主的意思。他不希望在SQL中进行错误处理,而是希望在网站上进行:如果过去两天没有发现数据,则只需显示一个空图即可。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何进行“ for循环”递归

来自分类Dev

如何进行无限递归?

来自分类Dev

如何进行适当的深度复制?

来自分类Dev

如何进行适当的模板绑定?

来自分类Dev

如何进行递归LINQ查询?

来自分类Dev

用Elixir递归如何进行for循环?

来自分类Dev

Clojure:如何进行基本递归?

来自分类Dev

如何进行正切递归?

来自分类Dev

如何进行适当的Node.js错误回调?

来自分类Dev

如何进行适当的Node.js错误回调?

来自分类Dev

对递归以及如何进行退货打印感到困惑

来自分类Dev

DFS递归解决问题是如何进行的?

来自分类Dev

难以理解此Sudoku Solver如何进行递归

来自分类Dev

如何进行此SQL查询?

来自分类Dev

如何进行高级sql表比较

来自分类Dev

如何进行基于 SQL 范围的计算

来自分类Dev

如何进行if或汇编?

来自分类Dev

如何进行GARP?

来自分类Dev

如何进行for循环

来自分类Dev

如何进行突袭

来自分类Dev

如何进行对齐

来自分类Dev

如何进行排序?

来自分类Dev

如何进行转换SQL内部连接查询与实体框架

来自分类Dev

如何进行处理丢失记录的SQL查询?

来自分类Dev

如果某些值为null,如何进行SQL插入

来自分类Dev

SQL SERVER中的XML PATH如何进行NEST

来自分类Dev

C#和SQL Server:如何进行登录检查

来自分类Dev

如何在SQL中进行递归查询?

来自分类Dev

如何使用Spark Sql进行递归查询