选择在两列中具有相同值的所有行,而在另一列中同时具有不同的值?

  • 本文关键字:一列 选择 两列 sql sql-server
  • 更新时间 :
  • 英文 :


我有一个记录管理员访问的表。表中包含caretakerCodepatientIDvisitDatevisitAddress

我需要显示同一护理人员在同一天对多个患者进行护理的行中的所有信息。下面是一个例子。

caretakerCode      patientID     visitDate      visitAddress
---------------------------------------------------------------
John Q               13         2022/01/13     27 Hamilton Rd
John Q               13         2022/01/14     27 Hamilton Rd
John Q               15         2022/01/14     101 Congress St
Melanie B            22         2022/01/15     3 Redroad Ct

在这个例子中,输出将是

caretakerCode      patientID     visitDate      visitAddress
---------------------------------------------------------------
John Q             13         2022/01/14     27 Hamilton Rd
John Q             15         2022/01/15     101 Congress St

我试过连接,但我不确定如何使它超过2列。任何帮助将非常感激!

谢谢。

我认为你的例子是错误的,因为你想实现在同一天显示访问量。您的示例显示了2个不同的日期:2022/01/14和2022/01/15。

假设表名为dbo. tvisitors .

创建测试表
USE tempdb;
CREATE TABLE dbo.tVisits
(
caretakerCode nvarchar(50)  NOT NULL,
patientID     int           NOT NULL,
visitDate     date          NOT NULL,
visitAddress  nvarchar(512) NOT NULL
);

插入测试数据

INSERT INTO dbo.tVisits
(
caretakerCode,
patientID,
visitDate,
visitAddress
)
VALUES
( N'John Q',    13, '20220113', N'27 Hamilton Rd'  ),
( N'John Q',    13, '20220114', N'27 Hamilton Rd'  ),
( N'John Q',    15, '20220114', N'101 Congress St' ),
( N'Melanie B', 22, '20220115', N'3 Redroad Ct'    );

执行查询
;WITH CTE AS
(
SELECT 
V.caretakerCode,
V.visitDate
FROM dbo.tVisits V
GROUP BY 
V.caretakerCode,
V.visitDate
HAVING COUNT(*) > 1
)
SELECT 
V.caretakerCode,
V.patientID,
V.visitDate,
V.visitAddress
FROM dbo.tVisits V
INNER JOIN CTE ON 
CTE.caretakerCode = V.caretakerCode
AND CTE.visitDate = V.visitDate
ORDER BY 1,3,2;

返回行
tbody> <<tr>
caretakerCodepatientIDvisitDatevisitAddress
约翰Q132022-01-1427汉密尔顿Rd
约翰Q152022-01-14101年国会圣

相关内容

  • 没有找到相关文章

最新更新