Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何删除重复项和不需要的行_Sql_Excel_Oracle_Ms Query - Fatal编程技术网

Sql 如何删除重复项和不需要的行

Sql 如何删除重复项和不需要的行,sql,excel,oracle,ms-query,Sql,Excel,Oracle,Ms Query,所以我有一个从数据库中相互链接的“Sample”、“Test”和“Result”表,我试图使用MS Query提取信息。每个样本有一个测试,每个测试可能有大约20个结果,由不同的人输入 我想要的是,仅当我输入的人名与输入任何结果无关时,才显示示例 SELECT SAMPLE.SAMPLE_NUMBER, SAMPLE.TEXT_ID, SAMPLE.STATUS, SAMPLE.DATE_COMPLETED, SAMPLE.LOCATION, TEST.ANALYSIS, RESULT.ENTE

所以我有一个从数据库中相互链接的“Sample”、“Test”和“Result”表,我试图使用MS Query提取信息。每个样本有一个测试,每个测试可能有大约20个结果,由不同的人输入

我想要的是,仅当我输入的人名与输入任何结果无关时,才显示示例

SELECT SAMPLE.SAMPLE_NUMBER, SAMPLE.TEXT_ID, SAMPLE.STATUS, SAMPLE.DATE_COMPLETED, SAMPLE.LOCATION, TEST.ANALYSIS, RESULT.ENTERED_BY

FROM DATABASE.RESULT RESULT, DATABASE.SAMPLE SAMPLE, DATABASE.TEST TEST

WHERE TEST.SAMPLE_NUMBER = SAMPLE.SAMPLE_NUMBER AND RESULT.TEST_NUMBER = TEST.TEST_NUMBER 
        AND ((TEST.ANALYSIS='ID_META' Or TEST.ANALYSIS='ID_RIBO' Or TEST.ANALYSIS='ID_BACTERIA' Or TEST.ANALYSIS='ID_MOULD') 
        AND (SAMPLE.STATUS='C') AND (SAMPLE.DATE_COMPLETED Is Not Null) 
        AND (RESULT.ENTERED_ON Between [Start Date] And [End Date]) 
        AND (RESULT.ENTERED_BY<>[Enter Name]))
ORDER BY SAMPLE.DATE_COMPLETED
选择SAMPLE.SAMPLE\u编号、SAMPLE.TEXT\u ID、SAMPLE.STATUS、SAMPLE.DATE\u COMPLETED、SAMPLE.LOCATION、TEST.ANALYSIS、RESULT.ENTERED\u BY
来自DATABASE.RESULT结果、DATABASE.SAMPLE样本、DATABASE.TEST测试
其中TEST.SAMPLE\u编号=SAMPLE.SAMPLE\u编号和RESULT.TEST\u编号=TEST.TEST\u编号
和((TEST.ANALYSIS='ID\u META'或TEST.ANALYSIS='ID\u RIBO'或TEST.ANALYSIS='ID\u BACTERIA'或TEST.ANALYSIS='ID\u mold')
和(SAMPLE.STATUS='C')和(SAMPLE.DATE_COMPLETED不为空)
和(在[开始日期]和[结束日期]之间输入的结果)
和(结果由[输入名称]输入)
按样品订购。完成日期

这是到目前为止我所掌握的代码,但问题是,如果此人输入了10个结果中的一个,那么同一个样本将显示9次,只是在他没有输入结果的一次中没有显示。有没有一种方法可以让我说,如果他输入了任何结果,那么样本就根本不会出现。

当你发现自己想要通过一个涉及多行的条件来限制行数时(比如“我想要每个测试,其中多个结果都不是由此人输入的”),您不能使用简单的条件,如[Enter Name]输入的结果。这只会查看当前使用的每一行的值。您需要相关子查询或分析函数。我认为子查询更容易开始,在您的例子中,
notexists
子句具有直观的意义

(我还将用标准的现代连接语法重写这个)

所以这里我们说的是返回所有“不存在”的样本,任何测试结果都是由特定的人输入的。(我不确定您是否希望在主查询和子查询(RESULT和R2)上都使用日期过滤器,您必须根据数据来确定。)

编辑:如果希望每个示例一行,只需从主查询中删除测试/结果联接:

select SAMPLE.SAMPLE_NUMBER, SAMPLE.TEXT_ID, SAMPLE.STATUS, SAMPLE.DATE_COMPLETED, SAMPLE.LOCATION
from DATABASE.SAMPLE SAMPLE
where (SAMPLE.STATUS='C') and (SAMPLE.DATE_COMPLETED Is Not Null) 
    and NOT EXISTS (select 1 
                    from DATABASE.TEST T2
                    join DATABASE.RESULT R2
                      on R2.TEST_NUMBER = T2.TEST_NUMBER
                    where T2.SAMPLE_NUMBER = SAMPLE.SAMPLE_NUMBER
                      and T2.ANALYSIS in ('ID_META','ID_RIBO','ID_BACTERIA','ID_MOULD')
                      and R2.ENTERED_ON Between [Start Date] And [End Date]
                      and R2.ENTERED_BY = [Enter Name])
ORDER BY SAMPLE.DATE_COMPLETED;

非常感谢你!!这对我来说太好了!它不会删除所有样本的重复项,但我制作了一个简单的Excel宏来删除重复项,这样就可以了。对于以后看到这一点的其他人,我只想补充一点,您不小心忘记在Order BY语句之前添加第二个右括号“)”来结束初始WHERE语句。@potterwiz哦,太好了!我编辑了我的答案,以显示如何修改查询,使每个示例仅显示一行。
select SAMPLE.SAMPLE_NUMBER, SAMPLE.TEXT_ID, SAMPLE.STATUS, SAMPLE.DATE_COMPLETED, SAMPLE.LOCATION
from DATABASE.SAMPLE SAMPLE
where (SAMPLE.STATUS='C') and (SAMPLE.DATE_COMPLETED Is Not Null) 
    and NOT EXISTS (select 1 
                    from DATABASE.TEST T2
                    join DATABASE.RESULT R2
                      on R2.TEST_NUMBER = T2.TEST_NUMBER
                    where T2.SAMPLE_NUMBER = SAMPLE.SAMPLE_NUMBER
                      and T2.ANALYSIS in ('ID_META','ID_RIBO','ID_BACTERIA','ID_MOULD')
                      and R2.ENTERED_ON Between [Start Date] And [End Date]
                      and R2.ENTERED_BY = [Enter Name])
ORDER BY SAMPLE.DATE_COMPLETED;