我没有得到的SQL代码

时间:2015-10-15 23:49:11

标签: sql sql-server case

我从另一个离开公司的SQL人那里获得了这段代码。我似乎无法弄清楚在查询的这一部分中究竟要做什么,它还在= LEFT(period,4)=1)和其他点之间抛出错误

and (
   case when (
          case when (substring(FlowchartName,1,5)='HEDIS') 
               then SUBSTRING(FlowchartName,7,4)
               else cast(20 as varchar(4)) + substring(FlowchartName,2,2)
          end = LEFT(period,4)
        ) then 
            case when RIGHT(period,2) in (1,2,3,4,5,6) 
                 then 
                    case when ReportingType='RETROSPECTIVE' 
                         then 1
                         else 0
                    end
                 else 0
            end
        when (
           case when substring(FlowchartName,1,5)='HEDIS' 
                then SUBSTRING(FlowchartName,7,4)
                else cast(20 as varchar(4)) + substring(FlowchartName,2,2)
           end
        ) = LEFT(period,4)=1
    ) then 
         case when RIGHT(period,2) in (10,11,12) 
              then 
                 case when ReportingType='PROSPECTIVE' 
                      then 1
                      else 0
                 end
              else 0
         end
      else 0
end ) = 1
)

1 个答案:

答案 0 :(得分:0)

  • 首先测试特定[FlowchartName]的相关年份是否与[period]中的年份相同(它假设年份只能从2000年开始)< / p>

  • 它似乎正在进一步测试特定[FlowchartName]

  • 中有关年份的最后两位数字
  • 它在尝试允许根据结果是'RETROSPECTIVE'还是'PROSPECTIVE' <返回/加入查询结果(您还没有提供上下文)时使用它/ p>

  • 'RETROSPECTIVE'结果在年份的最后两位数字为1到6时返回(如果此测试失败,我不会感到惊讶,因为它只提供1个字符串来测试一个2个字符的字符串)和列[ReportingType]='RETROSPECTIVE'。我认为这里的意图是'RETROSPECTIVE'属于2001年,2002年,2003年,或2004年,或2005年,或2006年

  • 'PROSPECTIVE'结果以与'RETROSPECTIVE'相同的方式返回,稍有不同的是,[ReportingType]列需要具有值'PROSPECTIVE'和年份必须是2010年,或2011年,或2012年