AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 28541
Accepted
Kinyanjui Kamau
Kinyanjui Kamau
Asked: 2012-11-13 02:06:18 +0800 CST2012-11-13 02:06:18 +0800 CST 2012-11-13 02:06:18 +0800 CST

查询以比较 2 个表结果并过滤在表中找到的额外记录

  • 772

我有两个要比较的查询,并获取在第一个查询中找到的额外行,这些行不在第二个加 1 中。我需要 DocEntryCN 来执行一些工作。

例如查询 1

SELECT DocEntry AS "DocEntryCN" , Comments, JrnlMemo, DocTotal
FROM ORIN WHERE DocDate BETWEEN '10-27-2012' AND '10-29-2012' AND Comments IS NOT NULL 
ORDER BY DocTotal ASC, Comments

查询 2

SELECT DocEntry AS "DocEntryINV" , Comments, DocTotal
FROM OINV WHERE DocDate BETWEEN '10-27-2012' AND '10-29-2012' AND Comments IS NOT NULL 
ORDER BY DocTotal ASC, Comments

示例结果:查询 1

DocEntryCN    Comments    JrnlMemo      DocTotal
67            reverse     kaka-19       500
69            reverse     kaka-19       500
70            reverse     kaka-19       500
71            reverse     kaka-19       500
74            reverse     kaka-19       500
75            reverse     Rob-23        750
77            reverse     Rob-23        750
78            reverse     Rob-23        750
79            reverse     Rob-23        750
84            reverse     Paul-17       1250
86            reverse     Paul-17       1250
87            reverse     Paul-17       1250

示例结果:查询 2

DocEntryINV   Comments       DocTotal
1             kaka-19        500
3             kaka-19        500
5             kaka-19        500
6             kaka-19        500
7             Rob-23         750
9             Rob-23         750
10            Alex-09        1000
11            Olma-08        1150
12            Paul-17        1250 
13            Paul-17        1250
16            Paul-17        1250
17            Rita-99        1300
19            Rita-99        1300

期望的结果

DocEntryCN    Comments    JrnlMemo      DocTotal
67            reverse     kaka-19       500
69            reverse     kaka-19       500
75            reverse     Rob-23        750
77            reverse     Rob-23        750
78            reverse     Rob-23        750
84            reverse     Paul-17       1250
90            reverse     Rita-99       1300

在第一个查询中,“kaka-19”有 5 个重复项。在第二个查询中,相同的“kaka-19”有 4 个重复项。我希望我的结果如上所示,其中 (5-4)+1 = 2 表示“kaka-19”等等。

注意。查询 2 中的注释存储应该是唯一的发票编号。如果 OINV 表中任意两条注释相同,则表示存在重复错误。ORIN 表中的 JrnlMemo 字段存储 OINV 发票编号。对于任何发票重复没有。k,要冲销的贷方票据的正确数量应该是 k - 1。

如何为所需结果构建查询?

sql-server sql-server-2008-r2
  • 1 1 个回答
  • 3477 Views

1 个回答

  • Voted
  1. Best Answer
    Kevin Feasel
    2012-11-13T05:17:59+08:002012-11-13T05:17:59+08:00

    对于我的测试,我刚刚创建了几个临时表(#CN 代表 ORIN,#INV 代表 OINV)。您应该能够毫不费力地用上述查询替换它们。

    下面的查询应该是一个相对有效的查询来得到你想要的结果:

    with cn as
    (
        select
            *,
            ROW_NUMBER() over (partition by JrnlMemo order by DocEntryCN desc) as rownum
        from
            #CN
    ),
    inv as
    (   
        select
            Comments,
            count(*) as rowstoget
        from
            #INV        
        group by 
            Comments
    )
    select
        cn.DocEntryCN,
        cn.Comments,
        cn.JrnlMemo,
        cn.DocTotal
    from
        cn
        inner join inv on cn.JrnlMemo = inv.Comments
    where
        cn.rownum >= inv.rowstoget
    order by
        DocEntryCN;
    

    使用的样本数据:

    create table #CN
    (
        DocEntryCN int,
        Comments varchar(20),
        JrnlMemo varchar(20),
        DocTotal int
    );
    
    insert into #CN(DocEntryCN, Comments, JrnlMemo, DocTotal) values
    (67,            'reverse',     'kaka-19',       500),
    (69,            'reverse',     'kaka-19',       500),
    (70,            'reverse',     'kaka-19',       500),
    (71,            'reverse',     'kaka-19',       500),
    (74,            'reverse',     'kaka-19',       500),
    (75,            'reverse',     'Rob-23',        750),
    (77,            'reverse',     'Rob-23',        750),
    (78,            'reverse',     'Rob-23',        750),
    (79,            'reverse',     'Rob-23',        750),
    (84,            'reverse',     'Paul-17',       1250),
    (86,            'reverse',     'Paul-17',       1250),
    (87,            'reverse',     'Paul-17',       1250)
    
    create table #INV
    (
        DocEntryINV int,
        Comments varchar(20),
        DocTotal int
    );
    
    insert into #INV(DocEntryINV, Comments, DocTotal) values
    (1,             'kaka-19',        500),
    (3,             'kaka-19',        500),
    (5,             'kaka-19',        500),
    (6,             'kaka-19',        500),
    (7,             'Rob-23',        750),
    (9,             'Rob-23',         750),
    (10,            'Alex-09',        1000),
    (11,            'Olma-08',        1150),
    (12,            'Paul-17',        1250 ),
    (13,            'Paul-17',        1250),
    (16,            'Paul-17',        1250),
    (17,            'Rita-99',        1300),
    (19,            'Rita-99',        1300);
    

    我应该指出,结果将与您在所需结果部分中指出的略有不同,因为您有一个 DocEntryCN 为 90 的 Rita,但 ORIN 中没有 Rita 条目。否则,结果是一样的。

    • 3

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何查看 Oracle 中的数据库列表?

    • 8 个回答
  • Marko Smith

    mysql innodb_buffer_pool_size 应该有多大?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    从 .frm 和 .ibd 文件恢复表?

    • 10 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve