谁帮忙解答一下这一题,什么过程

Select A.fMaterielNo As fMaterielNo3/* 物料编号 */,

A.fBarCode As fBarCode25/* 条码 */,

A.fManSign As fManSign39/* 自定义标识码 */,

A.fMaterielName As fMaterielName4/* 物料名称 */,

A.ZJM As ZJM24/* 助记码 */,

A.fForeignName As fForeignName6/* 外文名称 */,

A.fMaterielSpec As fMaterielSpec5/* 物料规格 */,

A.fBaseUnit As fBaseUnit17/* 基础单位 */,

A.fPurchaseSprice As fPurchaseSprice19/* 标准进价 */,

A.fLastTaxPrice As fLastTaxPrice46/* 最新进价 */,

A.fSaleSprice As fSaleSprice18/* 标准售价 */,

A.fBalance As fBalance0/* 售价与进价比 */,

A.fMaterielID As fMaterielID1/* 物料ID */

 From (select A.*,B.fTypeNo+' '+B.fTypeName as fTypeNoName,

C.fPardNo+' '+C.fPardName as fPardNoName,

(case when fLastTaxPrice<>0 then fSaleSprice/fLastTaxPrice else 0 end)  as fBalance

from PCode_Materiel as A

 left join PCode_MaterielType as B on A.fLineType=B.fTypeId

 left join OpPard_Pard as C on A.fProviderID=C.fPardID)  As A /*查询.PCode_物料管理*/ 

 Where 1=1and ((A.SignDelete IS NULL)  or (A.SignDelete <> 1) )  


鹏鹏起飞了 发布于 2019-9-26 14:30 (编辑于 2019-9-26 14:31)
1min目标场景问卷 立即参与
回答问题
悬赏:4 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
1
天狮座Lv6初级互助
发布于2019-9-26 14:42

拆开看,

先看里面的:

select A.*,B.fTypeNo+' '+B.fTypeName as fTypeNoName,

C.fPardNo+' '+C.fPardName as fPardNoName,

(case when fLastTaxPrice<>0 then fSaleSprice/fLastTaxPrice else 0 end)  as fBalance

from PCode_Materiel as A

 left join PCode_MaterielType as B on A.fLineType=B.fTypeId

 left join OpPard_Pard as C on A.fProviderID=C.fPardID

表A关联表B,A.fLineType与B.fTypeId相同的情况下, 把表B的字段带出来,表A再和表C关联,同理。

判断fLastTaxPrice不等于0,如果为真,执行fSaleSprice/fLastTaxPrice,反之为0.


再看外面:

以这个表为基础,重命名为A

把表A的字段全部查询出来,然后

((A.SignDelete IS NULL)  or (A.SignDelete <> 1) )  

A.SignDelete 等于空或者不等于1的情况下,把结果查询出来


  • 鹏鹏起飞了 鹏鹏起飞了(提问者) left join 这个语句作用是什么 大神能解释一下吗?
    2019-09-26 15:28 
  • 天狮座 天狮座 回复 鹏鹏起飞了(提问者) 左关联,百度下,以左边为主表关联
    2019-09-26 19:32 
最佳回答
0
@@..Lv1见习互助
发布于2019-9-26 14:36

这不就是一个SQL句子吗?

最佳回答
0
jongwangLv6中级互助
发布于2019-9-26 15:36

可以查看sql的时候,排版下:

Select 

A.fMaterielNo          As fMaterielNo3/* 物料编号 */,

A.fBarCode              As fBarCode25/* 条码 */,

A.fManSign              As fManSign39/* 自定义标识码 */,

A.fMaterielName     As fMaterielName4/* 物料名称 */,

A.ZJM                       As ZJM24/* 助记码 */,

A.fForeignName      As fForeignName6/* 外文名称 */,

A.fMaterielSpec       As fMaterielSpec5/* 物料规格 */,

A.fBaseUnit              As fBaseUnit17/* 基础单位 */,

A.fPurchaseSprice   As fPurchaseSprice19/* 标准进价 */,

A.fLastTaxPrice        As fLastTaxPrice46/* 最新进价 */,

A.fSaleSprice           As fSaleSprice18/* 标准售价 */,

A.fBalance               As fBalance0/* 售价与进价比 */,

A.fMaterielID           As fMaterielID1/* 物料ID */

From  

(

select  A.*,

           B.fTypeNo+' '+B.fTypeName     as fTypeNoName,

                   C.fPardNo+' '+C.fPardName     as fPardNoName,

                   (case when fLastTaxPrice<>0 then fSaleSprice/fLastTaxPrice else 0 end)  as fBalance

       from PCode_Materiel as A

            left join PCode_MaterielType as B on A.fLineType=B.fTypeId

            left join OpPard_Pard as C on A.fProviderID=C.fPardID

)  As A /*查询.PCode_物料管理*/ 

Where 1=1  

and ((A.SignDelete IS NULL)  or (A.SignDelete <> 1) ) 



 整个过程逻辑:

 1从 PCode_Materiel 中取全部数据,

 2左关联PCode_MaterielType表取fTypeNo、fTypeName 拼接(中间带空格)成一个字段fTypeNoName ,

 3左关联OpPard_Pard表取fPardNo、fPardName(中间带空格)拼接成一个字段fPardNoName,

 4取PCode_Materiel中fSaleSprice/fLastTaxPrice 大概是算一个比率 作为fBalance(case when 那个语句是除数为0时则字段值为0,也可以考虑用"nvl(fSaleSprice/nullif(fLastTaxPrice,0),0) fBalance")

 5取SignDelete为空或者不等于1时,以上结果集中,所需字段作为最终结果。

 


  • 4关注人数
  • 452浏览人数
  • 最后回答于:2019-9-26 15:36
    请选择关闭问题的原因
    确定 取消
    返回顶部