获取不同的值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

我永远不会使用distinct,但总是通过子句来表示group,distinct实际上是一个脏组,因为它不输出相同的行。

为了传达列的性别,您必须在这里形成一个聚合,例如使用STRING_AGG(请参阅聚合/STRING函数https://learn.microsoft.com/en-us/sql/t-sql/functions/string-functions-transact-sql?view=sql-服务器-服务器15(。

示例:

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',
'123',
'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中缺少的条目(我认为这正是您想要的(。

最新更新