在同一个表中联接查询

时间:2019-10-18 14:28:39

标签: sql sql-server sql-server-2008

我有import hashlib # hashlib.sha1('{salt}{pw}'.encode()).hexdigest() == {pw_hash} hashlib.sha1('e40e1e9addc186828a5554a71527342c123456'.encode()).hexdigest() == '784517f57fbe61179960739e29d7ae925aa4fd5b' # True 表,下面是数据

errorflag

我想输出如下数据

+-----+-----+-------+
| ID  | NO  | Error |
+-----+-----+-------+
| 200 | 100 |     1 |
| 201 | 100 |     0 |
| 202 |  98 |     1 |
| 203 |  98 |     1 |
| 204 |  99 |     1 |
| 205 |  87 |     1 |
| 206 |  87 |     0 |
| 207 |  90 |     1 |
+-----+-----+-------+

当数字在字段“否”中重复且错误为1和0时,我要从结果中排除。

我正在努力处理联接并拥有计数查询。

6 个答案:

答案 0 :(得分:2)

private void Form1_Load(object sender, EventArgs e)
   { 
        this.TopMost = true;
        this.FormBorderStyle = FormBorderStyle.None;
        this.WindowState = FormWindowState.Maximized;
   }

Example at dbfiddle.co.uk

答案 1 :(得分:2)

我不清楚要问什么。

如果我正确地认为您只希望NO的值而没有0的错误,那么这应该可以解决问题:

SELECT `NO`
  FROM errorflag
  WHERE `NO` NOT IN (
                  SELECT `NO`
                    FROM errorflag 
                    WHERE Error = 0)
  GROUP BY `NO`

输出:

NO
90
98
99

Sqlfiddle是here

答案 2 :(得分:2)

如果使用聚合函数,也可以在单个查询中执行此操作。根据您描述的环境,Error只能保留0或1的值。因此,您可以按NO进行分组,并确保Error的最小值永远不会为零。

SELECT NO FROM TableName
GROUP BY NO
HAVING MIN(Error) <> 0

答案 3 :(得分:0)

可能是您可以检查errono count = 2和明显错误= 2

  select e.* from errorflag e
  left join (
    select  errono, count(*) num_err_no, count(distinct error) count_error 
    from errorflag 
    group by errono 
    having count(*) =2 and count_error = 2
  ) t on t.errorno = e.errorno 
  where t.errorno is null

答案 4 :(得分:0)

如果error标志始终为01,则可以使用not exists

select ef.*
from errorflag ef
where not exists (select 1 
                  from errorflag ef1 
                  where ef1.no = ef.no and ef1.error <> ef.error
                 );

对于仅单列,则仅聚合就足够了:

select no
from errorflag ef
group by no
having count(distinct error) = 1;

答案 5 :(得分:0)

要排除存在01对的ID(否),请尝试以下操作

SELECT DISTINCT NO FROM errorflag  
WHERE ID NOT IN 
            (SELECT e1.ID FROM errorflag e1 
                        JOIN errorflag e2 
                            ON (e1.Error = 0 And e2.error = 1 or e2.Error = 0 And e1.error = 1) AND e1.[No] = e2.[no]
            )

每个NO最多有2个错误?

例如,对于NO 99,是否会出现错误0、1、1、1?

查看此处的更改

http://sqlfiddle.com/#!18/2d2cf5/3