获取SQL Server 2016的非重复值

我的问题是...
我有这个明显的表格结果
表1:
SELECT DISTINCT (concat(accT,DOC)) as accTDOC FROM AuxTable

accTDOC
xxx123
yyy456

2行

当我为另一个字段分组时,得到以下结果:
表2:
SELECT DISTINCT(concat(accT,DOC))) as accTDOC,GENDER FROM AuxTable group by accT,DOC,GENDER

accTDOC GENDER
xxx123  M
xxx123  F
yyy456  M

3行

如何在第二张表中仅获得与表一匹配的一行。 我必须保留性别字段。那可能吗? 我可以显示表1和表2之间的区别吗?

我的预期结果是

accTDOC GENDER
xxx123  M
yyy456  M
dongjping 回答:获取SQL Server 2016的非重复值

我永远不会使用distinct,但总是使用group by子句,distinct实际上是脏组,因为它不会输出相同的行。

为了传达列的性别,您必须在此处形成汇总,例如使用STRING_AGG(请参阅聚合/字符串函数https://docs.microsoft.com/en-us/sql/t-sql/functions/string-functions-transact-sql?view=sql-server-ver15)。

示例:

DECLARE @TableTest TABLE
    (ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,ACCT VARCHAR(10) NOT NULL,DOC VARCHAR(10) NOT NULL,GENDER VARCHAR(10) NULL)

INSERT INTO @TableTest
  (ACCT,DOC,GENDER) 
VALUES
  ('xxx','123','M'),('xxx','F'),('yyy','456','M')

SELECT CONCAT(tt.ACCT,tt.DOC) as ACCTDOC,--tt.ACCT,--tt.DOC,STRING_AGG(tt.GENDER,'/') AS Genders
FROM   @TableTest AS tt
GROUP BY tt.ACCT,tt.DOC
,

没有测试数据可以尝试,但是我希望以下查询对您有用:

SELECT *
FROM Table2 AS t2
WHERE NOT EXISTS 
(
    SELECT 1 
    FROM Table1 AS t1 
    WHERE t1.ACCT = t2.ACCT AND t1.DOC = t2.DOC
)

对于表2中的每一行,请使用两个指定的列检查同一行是否未出现在表1中。不过有个笔记;它仅显示表1中缺少的条目(我假设这是您想要的)。

本文链接:https://www.f2er.com/3151606.html

大家都在问