SQLSERVER 数据库多表联查重复值问题

您所在的位置:网站首页 数据库中重复数据怎么查看出来 SQLSERVER 数据库多表联查重复值问题

SQLSERVER 数据库多表联查重复值问题

#SQLSERVER 数据库多表联查重复值问题| 来源: 网络整理| 查看: 265

       之前在网上找了好就都没有找到我想要的,都说使用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