■賴春林
運用T-SQL語句查詢分析應注意的幾個方面
■賴春林
如今的審計實務中,越來越多地運用了T-SQL語句進行數據的查詢分析。尤其是這次全國醫(yī)療保險基金審計,海量的數據采集整理完畢之后,接下來就需要利用結構化查詢語句做對比分析,生成審計疑點。T-SQL語句就是常見的一種結構化查詢語句。正確的思路和算法才能得出更準確的疑點。思路或算法若出現錯誤,將導致現場審計人員和被審計單位核對不精確“疑點”所耗費的人力財力物力增加,無效工作時間變長。
鑒于對T-SQL語句的依賴越來越強,有必要對計算機審計思路和T-SQL語句的語法加強學習。本文將在采集的數據基本無誤且通過了校驗整理的大前提下,總結此次醫(yī)保審計以來,從數據分析的思路和算法實現上容易出錯的幾個地方。
在得出一個審計疑點之前,審計人員在對相關法律法規(guī)理解之后,才能做到審計思路縝密、條理清晰且在算法上可實現。應注意以下幾個方面:
(一)正確選取篩查對象
1.查詢欠繳或繳費不足情況時,需要比對有減免優(yōu)惠政策的數據,對可以享受減免優(yōu)惠政策的人員應按照享受期間予對應繳額以核減。
2.查詢一人多卡(重復參保)情況時,應排除轉保、掛失等正常情況,篩查疑點數據需要檢驗一人多卡的每張卡使用期間是否重疊,卡的狀態(tài)是否正常。
3.查詢掛床住院人數情況時,需要考慮存在非醫(yī)保參保人員住院情況,因此應以醫(yī)院HIS系統住院數據為準,醫(yī)保數據作為參照。
4.各種費用的統計或篩查,需要考慮是否存在退費的情況,若存在,需要進行排除。
5.判斷參保人員死亡,需要考慮是以醫(yī)院數據為準,還是以民政殯葬數據或公安數據為準,此處具體問題需要具體對待。
(二)唯一標識實體字段
我們知道個人實體可以用身份證號碼作為唯一標識字段,那么單位實體呢?如標識同一家醫(yī)院,該醫(yī)院可以在不同時期有不同行政區(qū)劃所屬、不同名稱、不同等級,名稱有全稱及不同版本的簡稱,醫(yī)院碼也無統一標準,所以此處應采用相對統一、穩(wěn)定的組織機構代碼(統一社會信用代碼)作為標識,更為可靠。
(三)注意時段性數據
這些數據在不同的時間,狀態(tài)可能發(fā)生變化,如個人婚姻狀態(tài)、個人或家庭低保狀態(tài)、醫(yī)院床位數、人員所屬單位、人員參保狀態(tài)、單位所在地等等。這些情況在思考審計思路時應注意加以區(qū)別。
正確的審計思路提出來后,就要靠嚴謹的算法來準確無誤地實現思路。應避免以下幾種情況:
(一)內連接忽略的數據
表連接查詢分內連接、左(右)連接和全連接,三種連接方式表達的意思不同,出現的結果也未必相同。但語法上不報錯,故而很容易忽略掉一些數據。例如要查詢100個已知身份證號的個人的繳費情況,如果用“個人應繳實繳明細”與“個人基本信息表”以“身份證號”做內連接,結果可能只查詢到小于100的人數的繳費情況。
(二)條件語句寫錯
1.條件區(qū)間是開區(qū)間、閉區(qū)間,還是半開半閉區(qū)間,不同的條件影響不同的結果,重復的區(qū)間可能造成重復的數據。
2.多條件之間是用“與”還是“或”連接。哪些條件先與再或,哪些條件先或再與,若分不清“與或非”的運算順序,建議使用小括號強制提高優(yōu)先級。
算法合理之后,就需要對T-SQL語句的語法熟練,才能真正的寫出正確的算法。應注意以下幾點:
(一)誤操作丟失數據
1.數據導入時候,因字段類型原因或者原始數據的實際值與導入字段類型不匹配的原因,容易導致的數據丟失或失真。所以在導數據前,要仔細檢查原始數據的值有沒有不正常的,檢查要導入的字段類型設置是否符合原始數據需要,符合查詢運算需要,符合邏輯定義。
2.刪除重要數據之前必須先備份,要養(yǎng)成不在原始數據上操作的習慣。
3.允許多用戶連接數據庫服務器的時候,要按照需要設置權限控制,盡量少給權限,尤其注意少開放增刪改的權限。
(二)Null值參與運算造成的分析結果錯誤
T-SQL語句語法規(guī)定,算數表達式、字符表達式和日期表達式中若存在Null值參與運算,結果即為Null;邏輯表達式中若存在Null值參與運算,結果即為假。因此我們在實際運用當中,要注意避免這些情況,可以利用IsNull()函數來替代運算中碰到的Null值。
(三)數據類型與運算符不匹配造成的分析結果錯誤
當需要用到OrderBy子句對查詢結果排序的時候,若排序字段是字符型的數字,就要特別注意,“10”比“2”升序排序時更靠前。
(四)超出數據類型取值范圍造成的分析結果錯誤
SQL Server中,相同數據類型大類里有多種不同的小類,其取值范圍是有差異的。如日期時間類型中的date型、datetime型、smalldatetime型、datetime2型等,其取值范圍日期部分分別是“0000-01-01到9999-12-31”、“1753-01-01到9999-12-31”、“1900-01-01到2079-06-06”、“0000-01-01到9999-12-31”。在它們之間進行類型轉換、數據值運算時就要注意因超出取值范圍而影響查詢結果的問題。
(五)去重(不去重)造成的分析結果錯誤
一般而言,統計次數時,Count函數不需要加Distinct去重,而統計個數時,需要加Distinct去重。實際工作中應具體對待。同時還要注意Count函數的參數如果是具體字段時,會忽略Null值。
以上是筆者在此次醫(yī)保審計數據采集、數據整理、數據分析中遇到過的問題,為了盡量避免出現以上問題,需要我們多思考、多學習,不怕麻煩不怕累,邏輯推理要縝密,計算方法要嚴謹和語法運用要熟練。
(作者單位:南昌市審計局)