2015-10-15 18 views
-1

我已經從離開公司的另一個SQL人那裏得到了這些代碼。我似乎無法弄清楚到底什麼是試圖在查詢的這部分工作要做,也正是在= LEFT(period,4)=1)其他點之間拋出和錯誤我沒有得到的SQL代碼的位

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 
) 
+4

所有格式的代碼的第一位。機器可以理解文本牆,人並不總是。 – lad2025

+0

在格式化之後,這裏無疑會丟失代碼 –

+0

在這段代碼中,最後兩個關閉parentesis都丟失了,除非您沒有通過所有代碼,否則沒有任何可取之處。 –

回答

0
  • 它首先測試,看看是否今年對於特定[FlowchartName]問題是相同[period]年份(它看起來假設年內只能是從2000年起)

  • 它看起來還有待進一步測試年份的最後兩個數字有問題了特別是[FlowchartName]

  • 它使用這在試圖讓查詢結果中返回/加入了(你沒有提供的上下文)的基礎上的結果是否'RETROSPECTIVE',或'PROSPECTIVE'

  • 'RETROSPECTIVE'結果返回時,一年中的最後兩位數字是1到6(如果此測試無法看到,我們不會感到驚訝,因爲它只提供1個字符的字符串來測試2個字符的字符串)和列[ReportingType]='RETROSPECTIVE'。我相信這裏的目的是'RETROSPECTIVE'屬於2001年或2002或2003或2004年或2005年或2006年

  • 'PROSPECTIVE'結果被以同樣的方式爲'RETROSPECTIVE'返回,略有區別是列[ReportingType]需要具有'PROSPECTIVE'價值和一年需要是2010年或2011年或2012

+0

感謝您的洞察力。非常感激。它會在= LEFT(句點,4)= 1)時出現錯誤,然後在「Msg 102,Level 15,State 1,Line 102中的RIGHT(句點2)」時出現錯誤'012'=''附近的語法不正確。 –

相關問題