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

zed5wv10  于 2023-01-16  发布在  其他
关注(0)|答案(1)|浏览(168)

我有一个记录看护人探视的表,该表包含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列。任何帮助将不胜感激!
谢谢你。

tcomlyy6

tcomlyy61#

我认为您的示例是错误的,因为您希望显示同一天的访问量。您的示例显示了两个不同的日期:2022年1月14日和2022年1月15日。
假定表名为dbo.tVisits。

创建测试表

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;

返回的行

| 管理程序代码|患者ID|访视日期|访问地址|
| - ------|- ------|- ------|- ------|
| 约翰·Q|十三|2022年1月14日|汉密尔顿路27号|
| 约翰·Q|十五|2022年1月14日|国会街101号|

清理

DROP TABLE IF EXISTS dbo.tVisits;

说明:在Common Table Expression CTE中,选择同一个管理员在同一个访问日期有多行的行,在第2步中,使用原始表中的这些信息通过内部连接过滤行。

  • 如果此帖子回答了您的问题,请不要忘记将其标记为答案。*

相关问题