日期:2014-05-18  浏览次数:20505 次

关于sql查询的效率问题,有知道的告知一下,急急急急
有一段sql查询语句,能执行,但是效率低下,客户反应强烈。。。不知有什么办法改进一下,分少,不好意思。。


[code=SQL][/code]SELECT 农户信息.姓名, 报销登记.医疗证号, 报销登记.入院日期, 
  报销登记.出院日期,报销登记.总费用-报销登记.应报金额 AS 剔除金额, DATEDIFF(day, 报销登记.入院日期, 报销登记.出院日期) 
  AS 天数, 报销登记.总费用, 报销登记.报销金额, 报销登记.报销医院编码, 
  [医疗服务单位_2].名称 AS 报销医院, 报销登记.住院类型,报销登记.应报金额, 
  [行政区划_1].名称 AS 所在村, 医疗证.区划编码, [行政区划_2].名称 AS 所在镇, 
  农户信息.性别, 农户信息.出生日期, [医疗服务单位_1].名称 AS 住院医院, 
  疾病表.疾病名称 AS 临床印象,报销登记.备注 AS 联系方式,
  (CASE WHEN 报销登记.慢性病人=1 THEN '是' ELSE '否' END) AS 慢性病报销,
  (CASE WHEN 正常分娩=1 THEN '是' ELSE '否' END) AS 正常分娩报销,
  (CASE WHEN 剖宫分娩=1 THEN '是' ELSE '否' END) AS 剖宫分娩报销,
  (CASE WHEN 婚检补助=1 THEN '是' ELSE '否' END) AS 婚检报销
FROM 医疗服务单位 [医疗服务单位_1] RIGHT OUTER JOIN
  报销登记 LEFT OUTER JOIN
  疾病表 ON 报销登记.入院诊断 = 疾病表.编号 ON 
  [医疗服务单位_1].编码 = 报销登记.诊治医院编码 LEFT OUTER JOIN
  医疗服务单位 [医疗服务单位_2] ON 
  报销登记.报销医院编码 = [医疗服务单位_2].编码 LEFT OUTER JOIN
  医疗证 LEFT OUTER JOIN
  行政区划 [行政区划_2] ON LEFT(医疗证.区划编码,
  (SELECT bmcd FROM #LSB)) = [行政区划_2].国际编码 LEFT OUTER JOIN
  行政区划 [行政区划_1] ON LEFT(医疗证.区划编码, 10) 
  = [行政区划_1].国际编码 RIGHT OUTER JOIN
  农户信息 ON 医疗证.医疗证号 = 农户信息.医疗证号 ON 
  报销登记.患者序号 = 农户信息.序号 AND 
  报销登记.医疗证号 = 农户信息.医疗证号
WHERE (报销登记.诊治类型 = '住院') AND (报销登记.审核 = 1) AND (报销登记.报销日期 >= '2011-05-01') AND
  (报销登记.报销日期 <= '2011-06-01') and (left(报销登记.医疗证号,2)='06' or 报销医院编码='70')[code=SQL][/code]

------解决方案--------------------
高手写的

LEFT OUTER JOIN * 5
+
RIGHT OUTER JOIN * 2