首先,我知道我应该有一个价值患者ID的主键。为ID转换执行了一个项目,但进展并不顺利。所以现在我需要查找具有不同患者姓名的所有患者ID。有4个不同的DB>包含信息的表。现在我将它们选入Temp DB。因为我实际上需要所有PID在这些DB之间是不同的。我们的应用程序具有保持同步的工具。但是由于一些糟糕的SQL工作,我需要再次同步所有数据。
PID NAME
1234 Johnson
1234 Johnson
4567 Jones
4567 Alexander
我正在尝试编写一个查询,该查询将返回Jones和Alexander的PID 4567 + NAME值的结果。
答案 0 :(得分:0)
SELECT Min(PID), Name FROM [Table]
GROUP BY Name
HAVING Count(PID) = 1
答案 1 :(得分:0)
您需要使用自我加入。请试试这个:
create table #temp
(id int, name varchar(30))
insert into #temp values (1,'johnson')
insert into #temp values (1,'johnson')
insert into #temp values (2,'james')
insert into #temp values (2,'Alex')
SELECT * FROM #temp WHERE id IN (
SELECT a.id FROM #temp a
JOIN #temp b on b.id = a.id AND b.name <> a.name
)
答案 2 :(得分:-1)
我认为这样做会
recyclerView.scrollToPosition(length-1)
或
select p.pid, max(name), min(name), count(*) as cnt
from p
group by pid
having max(name) <> min(name)
答案 3 :(得分:-1)
SELECT PID,NAME
FROM TABLE
GROUP BY PID,NAME
HAVING COUNT(*) =1
答案 4 :(得分:-1)
根据您使用的RDBMS系统,有很多方法和一些方法比其他方法更优化。但通常这是一个两步操作。
1)查找具有多个与之关联的名称的所有PID 2)返回以获取您正在寻找的其余数据。
CREATE TABLE #T (
PID INT
,Name VARCHAR(25)
)
INSERT INTO #T (PID,Name) VALUES (1234,'Johnson'),(1234,'Johnson'),(4567,'Jones'),(4567,'Alexander')
SELECT
t2.*
FROM
(
SELECT
PID
FROM
#T t1
GROUP BY
PID
HAVING COUNT(DISTINCT Name) > 1
) dupes
INNER JOIN #T t2
ON dupes.PID = t2.PID
使用诸如join或IN之类的方法时,使用DISTINCT名称非常重要,因为简化计数*或名称将返回多次出现的相同PID到名称组合,而不仅仅是重复。
如果您只想要重复而不是所有组合。使用RowNumber()或其他东西可以帮助您更有效地得到答案。或者您也可以使用一种方法,例如查找不相同记录的存在,如下所示:
SELECT DISTINCT t1.PID, t1.Name
FROM
#T t1
WHERE
EXISTS (SELECT 1 FROM #t t2 WHERE t1.PID = t2.PID AND t1.Name <> t2.Name)
根据数据集等,这种方式可以更快地执行。对于像这样的情况,我倾向于远离使用IN的解决方案。