• 帮忙看看怎么优化这个最长的sql


    SELECT * FROM (
    SELECT 
    pp.PersonName,
                            pp.IDNO,
                    pp.Sex, 
                           (SELECT CID FROM T_SYS_DATADICT WHERE NAME='xb' AND CODE=pp.Sex) AS sextext,
                   (CASE WHEN job.job_householderid IS NULL THEN '无务工人员' ELSE '有务工人员' END) AS job_info,
                   (CASE WHEN zaixiao.zaixiao_householderid IS NULL THEN '无在校生' ELSE '有在校生' END) AS zaixiao_info,
                   (CASE WHEN jb1.jb1_householderid IS NULL THEN '无常见慢性病人员' ELSE '有常见慢性病人员' END) AS jb1_info,
                   (CASE WHEN jb2.jb2_householderid IS NULL THEN '无特殊慢性病人员' ELSE '有特殊慢性病人员' END) AS jb2_info,
                   (CASE WHEN jb3.jb3_householderid IS NULL THEN '无重大疾病人员' ELSE '有重大疾病人员' END) AS jb3_info,
                   (CASE WHEN canji.canji_householderid IS NULL THEN '无残疾人员' ELSE '有残疾人员' END) AS canji_info,
                   (CASE WHEN db.db_householderid IS NULL THEN '无低保人员' ELSE '有低保人员' END) AS db_info,
                   (CASE WHEN wb.wb_householderid IS NULL THEN '无五保人员' ELSE '有五保人员' END) AS wb_info,
                   yearincome.year_income_perp,
                   monthincome.month_income_perp,
    CASE WHEN (pf.farmland='' OR pf.farmland IS NULL OR pf.HouseCount=0) THEN 0 ELSE
    (CONVERT(DECIMAL(18,2),pf.farmland / CONVERT(DECIMAL,pf.HouseCount))) END AS farmland_perp,
    CASE WHEN (pf.HouseArea='' OR pf.HouseArea IS NULL OR pf.HouseCount=0) THEN 0 ELSE
    (CONVERT(DECIMAL(18,2),pf.HouseArea / CONVERT(DECIMAL,pf.HouseCount))) END AS housearea_perp,
    (SELECT (',' + mum.PersonName)
    FROM Basic_PoorPeople mum WHERE mum.HouseHolderID=pf.HouseHolderID FOR XML PATH('') ) AS allPersonname,
    (SELECT (',' + mum.IDNO)
    FROM Basic_PoorPeople mum WHERE mum.HouseHolderID=pf.HouseHolderID FOR XML PATH('') ) AS allIdno,
    (SELECT (',' + bhd.Name) FROM Basic_HelpDutyPerson bhd
    WHERE bhd.ID IN (SELECT HelpDutyPersonID FROM Basic_PoorFamily_HelpDutyPerson_Map WHERE HouseHolderID=pf.HouseHolderID)
    FOR XML PATH('') ) AS helpdutypersonnames
    FROM (
    SELECT * FROM Basic_PoorFamily WHERE DISABLE=0
    ) pf LEFT JOIN (
    SELECT HouseHolderID,PersonName,Sex,IDNO FROM Basic_PoorPeople WHERE DISABLE=0 AND FamilyRelationID='01'
    ) pp ON pf.HouseHolderID=pp.HouseHolderID
    LEFT JOIN (
    SELECT DISTINCT y.HouseHolderID AS job_householderid FROM
    (
    SELECT PoorPeopleID FROM Basic_PoorPeople_Jobs WHERE 
    (LeaveYear=0 AND LeaveMonth=0
    AND (DATEPART(YEAR,GETDATE())*12+DATEPART(MONTH,GETDATE())) >=(EntryYear*12+EntryMonth)
    ) OR 
    (LeaveYear!=0 AND LeaveMonth!=0 AND 
    (DATEPART(YEAR,GETDATE())*12+DATEPART(MONTH,GETDATE())) >=(EntryYear*12+EntryMonth) AND
    (DATEPART(YEAR,GETDATE())*12+DATEPART(MONTH,GETDATE())) <=(LeaveYear*12+LeaveMonth) 
    )
    ) x INNER JOIN Basic_PoorPeople y ON x.PoorPeopleID=y.ID
    ) job ON pf.HouseHolderID=job.job_householderid
    LEFT JOIN (
    SELECT icm1.HouseHolderID,
    CASE WHEN (SELECT pf0.HouseCount FROM Basic_PoorFamily pf0 WHERE pf0.HouseHolderID=icm1.HouseHolderID AND pf0.DISABLE=0)=0 THEN 0
    ELSE (
    CONVERT(DECIMAL(18,2),
    (icm1.GongZi+icm1.ShengChan+icm1.CaiChan+icm1.JiHuaShengYu+icm1.DiBao+icm1.WuBao+icm1.YangLao+icm1.ShengTai+icm1.QiTaZhuanYi-icm1.ZhiChu)
    /(SELECT pf1.HouseCount FROM Basic_PoorFamily pf1 WHERE pf1.HouseHolderID=icm1.HouseHolderID AND pf1.DISABLE=0 ))
    ) END AS year_income_perp
    FROM Basic_PoorFamily_Income icm1 WHERE icm1.IncomeYear = CONVERT(VARCHAR(10),DATEPART(YEAR,GETDATE())) 
    ) yearincome ON pf.HouseHolderID=yearincome.HouseHolderID
    LEFT JOIN (
    SELECT icm2.HouseHolderID,
    CASE WHEN (SELECT pf3.HouseCount FROM Basic_PoorFamily pf3 WHERE pf3.HouseHolderID=icm2.HouseHolderID AND pf3.DISABLE=0)=0 THEN 0
    ELSE (
    CONVERT(DECIMAL(18,2),
    (icm2.GongZi+icm2.ShengChan+icm2.CaiChan+icm2.JiHuaShengYu+icm2.DiBao+icm2.WuBao+icm2.YangLao+icm2.ShengTai+icm2.QiTaZhuanYi-icm2.ZhiChu)
    /(SELECT pf2.HouseCount FROM Basic_PoorFamily pf2 WHERE pf2.HouseHolderID=icm2.HouseHolderID AND pf2.DISABLE=0 )
    /DATEPART(MONTH,GETDATE()) ) 
    ) END AS month_income_perp
    FROM Basic_PoorFamily_Income icm2 WHERE icm2.IncomeYear = CONVERT(VARCHAR(10),DATEPART(YEAR,GETDATE()))
    ) monthincome ON pf.HouseHolderID=monthincome.HouseHolderID
    LEFT JOIN (
    SELECT DISTINCT HouseHolderID AS zaixiao_householderid FROM Basic_PoorPeople WHERE disable=0 AND InSchoolStatusID!='01'
    ) zaixiao ON pf.HouseHolderID=zaixiao.zaixiao_householderid
    LEFT JOIN (
    SELECT DISTINCT HouseHolderID AS jb1_householderid FROM Basic_PoorPeople WHERE disable=0 AND pp_health='2'
    ) jb1 ON pf.HouseHolderID=jb1.jb1_householderid
    LEFT JOIN (
    SELECT DISTINCT HouseHolderID AS jb2_householderid FROM Basic_PoorPeople WHERE disable=0 AND pp_health='3'
    ) jb2 ON pf.HouseHolderID=jb2.jb2_householderid
    LEFT JOIN (
    SELECT DISTINCT HouseHolderID AS jb3_householderid FROM Basic_PoorPeople WHERE disable=0 AND pp_health='4'
    ) jb3 ON pf.HouseHolderID=jb3.jb3_householderid
    LEFT JOIN (
    SELECT DISTINCT HouseHolderID AS canji_householderid FROM Basic_PoorPeople WHERE disable=0 AND pp_health='5'
    ) canji ON pf.HouseHolderID=canji.canji_householderid
    LEFT JOIN (
    SELECT DISTINCT HouseHolderID AS db_householderid FROM Basic_PoorPeople WHERE disable=0 AND ifdborwb='1'
    ) db ON pf.HouseHolderID=db.db_householderid
    LEFT JOIN (
    SELECT DISTINCT HouseHolderID AS wb_householderid FROM Basic_PoorPeople WHERE disable=0 AND ifdborwb='2'
    ) wb ON pf.HouseHolderID=wb.wb_householderid
    ) result

    进群与大神交流,【web前端交流学习群018】群号498854752

  • 相关阅读:
    vue 路由跳转返回上一级
    js中Let和Var的区别
    JS实现电话号码校验座机:区号号码、或11位手机号
    VUE 监听 对象属性值变化的三种方式
    vue中computed的用法
    elementUI中input输入框,强制输入数字,并限制输入长度
    C++中__int64用法
    WIN10计算器设计可能出现的坑
    跳转acticity
    asp.net邮件发送
  • 原文地址:https://www.cnblogs.com/xsns/p/6732700.html
Copyright © 2020-2023  润新知