我如何从一个 table select *唯一* MS Access SQL 代码中重复?

How do I select *unique* duplicates in MS Access SQL code from one table?

我正在尝试使用 SQL 到 select 唯一重复的服务日期,其所有记录都包含在一个 table 中。这是一个从 table:

开始的示例
GroupID ServiceID ServiceDate
A X 1/1/2010
A Y 1/1/2010
A Z 10/1/2010

我已经想出如何找到 2 条具有相同日期的不同记录并将它们排成一行,但我最终得到了一些重复的 table,因为它正在将每条记录与所有其他记录进行比较:

GroupID ServiceID1 ServiceDate1 ServiceID2 ServiceDate2
A X 1/1/2010 Y 1/1/2010
A Y 1/1/2010 X 1/1/2010

我不想要最后一行,因为它本质上是第一行的副本。

关于如何摆脱第二行的任何想法?

这是一些复制代码(这是我的 SQL Fiddle:http://sqlfiddle.com/#!9/537d84

CREATE TABLE MyTable (
  GroupID varchar(255),
  ServiceID varchar(255),
  ServiceDate Date
);

INSERT INTO MyTable (GroupID, ServiceID, ServiceDate)
VALUES ("A", "X", '2010-01-01'),
      ("A", "Y", '2010-01-01'),
      ("A", "Z", '2010-10-01');

SELECT DISTINCT 
  c1.ServiceID AS ServiceID1, c1.ServiceDate AS ServiceDate1, 
  c2.ServiceID AS ServiceID2, c2.ServiceDate AS ServiceDate2
FROM MyTable c1 INNER JOIN MyTable c2 
ON c1.GroupID = c2.GroupID 
WHERE (c1.ServiceID <> c2.ServiceID AND c1.ServiceDate = c2.ServiceDate);

注意:我认为我可以创建 A-B 和 B-A 组合 ID 变量,然后对它们 SELECT DISTINCT。不幸的是,这是 SQL 的一个比 MS Access 功能稍差的版本(技术上,我使用 Microsoft.ACE.OLEDB.12.0 连接字符串在 VBA 中编写它),所以有没有 CONCAT 函数,也没有 CASE WHEN 子句,语法效率方面存在其他缺陷。

关于如何摆脱第二行的任何想法?

由于您使用的是 <> 条件,因此您总是会得到重复的结果(x-y 和 y-x)。您可以任意决定较小的 ServiceId 应该始终位于 c1:

中,而不是使用 <>
SELECT DISTINCT 
  c1.ServiceID AS ServiceID1, c1.ServiceDate AS ServiceDate1, 
  c2.ServiceID AS ServiceID2, c2.ServiceDate AS ServiceDate2
FROM MyTable c1 INNER JOIN MyTable c2 
ON c1.GroupID = c2.GroupID 
WHERE (c1.ServiceID < c2.ServiceID AND c1.ServiceDate = c2.ServiceDate); 
-- Here ------------^

我附上了三张图片。

一个显示查询设计 第二个显示查询输出 第三个显示 table 数据(没有任何查询)