簡體   English   中英

SQL Server:將一行與同一表的多行進行比較

[英]SQL Server : Compare One Row with Multiple Rows of Same Table

我有如下數據:

id       docid     fname      lname 
1        1         x          y
2        1         x          y
3        1         x          y

我需要同時具有docid 1匹配行條件的相同文檔id的結果,我想將id 3與id 2和1進行比較,並且僅獲取匹配的記錄,而沒有id 3的匹配記錄。

id       docid      fname     lname
1        1         x          y
2        1         x          y

對我來說,好消息是僅與單個documentid進行比較,例如我有一個。同時,我也有比較記錄。 說id:3,它必須與其他兩個記錄進行比較。

以下是兩種情況,請將比較ID視為6:

id       docid     fname      lname 
4        2         p          q
5        2         r          s
6        2         p          q

id       docid     fname     lname
4        2         p          q

如果沒有記錄匹配,則結果為空。

我嘗試了以下內容:

SELECT ta.id,ta.docid,ta.fname,ta.lname FROM tbldoc ta 
      WHERE (SELECT COUNT(*)FROM tbldoc ta2 
           WHERE ISNULL(ta.id,'') = ISNULL(ta2.id,'') AND
                 ISNULL(ta.docid,'') = ISNULL(ta2.docid,'') AND
                 ISNULL(ta.fname,'') = ISNULL(ta2.fname ,'') AND
                 ISNULL(ta.lname,'') = ISNULL(ta2.lname ,'')
            )>1 AND docid=1 And id<>3 

但是,當所有列都具有空值時,它會失敗。

更新:上面是示例之一,這是我的真實場景表架構和數據

create table tbldoc (Created int,Checkn nvarchar(max),Account nvarchar(max),EONumber nvarchar(max),Voucher nvarchar(max),Invoice nvarchar(max),Total decimal,Venue nvarchar(max),Reference nvarchar(max),Sign bit,Room nvarchar(max),Page int);
insert into tbldoc values(59,1234,NULL,NULL,NULL,NULL,40,3,NULL,1,NULL,NULL);
insert into tbldoc values(62,1234,NULL,NULL,NULL,NULL,40,3,NULL,1,NULL,NULL);
insert into tbldoc values(68,1234,NULL,NULL,NULL,NULL,40,3,NULL,1,NULL,NULL);

嘗試這個 :

select a.* from tbldoc as a right join
(select * from tbldoc where id = 3) as b
on a.docid = b.docid
and a.fname = b.fname
and a.lname = b.lname
and a.id != b.id

您在第二行中定義標准(select * from tbldoc where id = 3) as b

要么

select a.* 
from tbldoc as a right join tbldoc as b
on a.docid = b.docid
and a.fname = b.fname
and a.lname = b.lname
and a.id != b.id
where b.id = 3

您正在最后一行定義標准, where id = 3

- 編輯 -

這是為您的真實表:

select a.* 
from tbldoc as a right join tbldoc as b
on (a.checkn = b.checkn or b.checkn is NULL)
and (a.Account = b.Account or b.Account is NULL) 
and (a.EONumber = b.EONumber or b.EONumber is NULL) 
and (a.Invoice = b.Invoice or b.Invoice is NULL) 
and (a.Total = b.Total or b.Total is NULL) 
and (a.Venue = b.Venue or b.Venue is NULL) 
and (a.Reference = b.Reference or b.Reference is NULL) 
and (a.Sign = b.Sign or b.Sign is NULL) 
and (a.Room = b.Room or b.Room is NULL) 
and (a.Page = b.Page or b.Page is NULL) 
and a.created != b.created
where b.created = 68

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM