我在SQL Server中有一个表,我很难查询我需要的数据。
这就是它的样子......
ClientNo RecordNo ApptDate
-----------------------------------------------
7 1 10/31/2016
7 2 10/31/2016
7 3 10/15/2016
9 1 11/12/2016
9 2 11/11/2016
18 1 9/19/2016
所以看一下这个表 - 每个客户端可以有1个或多个记录。我试图找到所有拥有1个以上记录的客户端,并且对于拥有1个以上记录的所有客户端 - 我需要确保只显示那两个条目具有相同ApptDate的客户端。
我的最终目标是看到这个...
ClientNo RecordNo ApptDate
-------------------------------------------
7 1 10/31/2016
7 2 10/31/2016
因此,客户端7有3条记录(1,2,3),而ApptDate则是3条记录中的2条。我只想查看ApptDate相同的记录,并跳过ApptDate = 10/15/2016的记录,因为它不相关!
我从来没有做过这样的事情,我指的是ApptDate = ApptDate并且真的不知道如何做到这一点。
答案 0 :(得分:1)
试试这个:
SELECT *
FROM mytable
wHERE ClientNo IN (SELECT ClientNo
FROM mytable
GROUP BY ClientNo
HAVING COUNT(DISTINCT RecordNo) > 1 AND
COUNT(DISTINCT ApptDate) = 1
HAVING
子句的第一个谓词:
COUNT(DISTINCT RecordNo) > 1
过滤掉只有一个相关ClientNo
值的RecordNo
值。
HAVING
子句的第二个谓词:
COUNT(DISTINCT ApptDate) = 1
过滤掉与ClientNo
个值相关的ApptDate
值。
修改强>
要获得具有相同ClientNo
,不同RecordNo
和相同ApptDate
的记录,您可以使用简单的JOIN
:
SELECT t1.*
FROM mytable AS t1
JOIN mytable AS t2
ON t1.ClientNo = t2.ClientNo AND
t1.ApptDate = t2.ApptDate AND
t1.RecordNo <> t2.RecordNo
答案 1 :(得分:1)
我相信这就是你要找的......窗口函数(https://msdn.microsoft.com/en-us/library/ms189461.aspx)会让你找到具有相同日期的客户。
select
clientno,
recordno,
apptdate
from
(
select
clientno,
recordno,
apptdate,
count(*) over(partition by clientno, apptdate) as numrecs
from
table
)
where
numrecs > 1