SQLSERVER 数据库多表联查重复值问题 |
您所在的位置:网站首页 › 数据库中重复数据怎么查看出来 › SQLSERVER 数据库多表联查重复值问题 |
之前在网上找了好就都没有找到我想要的,都说使用distinct 但是没有什么用,自己苦苦的搞了半个小时终于解决了,具体方法是子查询解决的。 一、什么是之查询 在SQL语言中,一个SELECT-FROM-WHERE语句称为一个查询块。当获得一个查询的答案需要多个步骤的操作,首先必须创建一个查询来确定用户不知道但包含在数据库中的值,将一个查询块嵌套在另一个查询块的WHERE字句或HAVING短语的条件中查询块称为子查询或内层查询。上层的查询块曾为父查询或外层查询。子查询的结果作为输入传递回“父查询”或“外部查询”。父查询将这个值结合到计算中,以便确定最后的输出。 二、子查询语法 (SELECT [ALL I DISTINCT ] FROM [WHERE ] [GROUP BY [HAYING }})语法规则: 1、之查询的SELECT 查询必须用括号抱起来。 2、不能包括COMPUTE 或 FOR BROWES 子句。 3、如果同时指定TOP句子,则可能只包括 ORDER BY 之句。 4、之查询最多可以嵌套32层。 5、如何可以使用表达式的地方都可以使用子查询,只要它返回单个值。 6、如果某个表出现子查询中而不出现外部查询中,那么该表中的列就无法包含在输出中。 三、子查询常用表达式 (1)第一种语法 SELECT *FROM 表 WHERE [NOT] IN (子查询)(2)第二种语法 SELECT *FROM 表名 where 查询 [ANY | ALL] (子查询)(3)第三种语法 SELECT *FROM 表名 WHERE [NOT] EXISTS (子查询)上面就是简单的子查询运用了, 四、我的运用 1、我在多表联查时,出现A连B连C连E的过程中B有重复值,但是B没有重复行 要关联C就查询重复行,所有我把A,B,C关联子查询就解决问题了,然后在关联B即可(就是以C为条件取出我想要的 A,B,C 的值)。 代码如下不谢: declare @TEMT_SJ datetime declare @TEMT_SJX datetime select BM.FNUMBER as 组织编码 ,ZZ.FNAME as 采购组织,GYSB.FNUMBER AS 供应商编码, CDT.FAPPROVEDATE, GY.FNAME as 供应商名称,CDT.FBILLNO as 采购订单据编号,wl .FNUMBER as 物料编码, WDL.FNAME as 物料名称,WDL.FSPECIFICATION as 物料规格, CM.FQTY as 数量 , isNULL( O.实收数量,0)as 实收数量 ,o.来源订单号,o.采购订单匹配机照, ISNULL(实收数量/CM.FQTY * 100,0) as 实际入库率 from T_PUR_POORDERENTRY CM LEFT JOIN (SELECT sum( RKT.FREALQTY) as 实收数量,GL.FSID as 采购订单匹配机照,RKT.FPOORDERNO as 来源订单号,GL.fstablename as 采购入库单内码 FROM T_STK_INSTOCK RK LEFT JOIN T_STK_INSTOCKENTRY RKT ON RK.FID=RKT.FID LEFT JOIN T_STK_INSTOCKENTRY_LK GL ON GL.FENTRYID=RKT.FENTRYID where GL.fstablename='t_PUR_POOrderEntry' GROUP BY GL.FSID ,RKT.FPOORDERNO,GL.fstablename) o on CM.FENTRYID=o.采购订单匹配机照 LEFT JOIN T_PUR_POORDER CDT ON CDT.FID=CM.FID LEFT JOIN T_BD_MATERIAL wl ON CM.FMATERIALID=wl.FMATERIALID LEFT JOIN T_BD_MATERIAL_L WDL ON CM.FMATERIALID=WDL.FMATERIALID LEFT JOIN T_BD_SUPPLIER_L GY ON CDT.FSUPPLIERID=GY.FSUPPLIERID LEFT JOIN T_BD_SUPPLIER GYSB ON CDT.FSUPPLIERID=GYSB.FSUPPLIERID LEFT JOIN T_ORG_ORGANIZATIONS_L ZZ ON CDT.FPURCHASEORGID= ZZ.FORGID LEFT JOIN T_ORG_ORGANIZATIONS BM ON CDT.FPURCHASEORGID=BM.FORGID where CDT.FBILLNO= 'A01CGDD/21-03-04/015627' and CDT.FAPPROVEDATE>=@TEMT_SJ and CDT.FAPPROVEDATE |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |