Sql 在执行语句时忽略重复记录
我只希望获取唯一记录的两个表。我创建了一个简短的SQL查询,如下所示:Sql 在执行语句时忽略重复记录,sql,sql-server,Sql,Sql Server,我只希望获取唯一记录的两个表。我创建了一个简短的SQL查询,如下所示: Declare @tempTable AS TABLE(Country VARCHAR(10),PatientId INT) INSERT INTO @tempTable VALUES ('India',1) Declare @tempStatus AS TABLE(PatientId INT, status VARCHAR(2)) INSERT INTO @tempStatus VALUES (1,'NA'),(1,
Declare @tempTable AS TABLE(Country VARCHAR(10),PatientId INT)
INSERT INTO @tempTable VALUES ('India',1)
Declare @tempStatus AS TABLE(PatientId INT, status VARCHAR(2))
INSERT INTO @tempStatus VALUES (1,'NA'),(1,'A'),(1,'D'),(1,'R'),(1,'A')
SELECT t.Country,t.PatientId,Status= (CASE
WHEN ts.status='A' THEN 'A'
WHEN ts.status='NA' OR ts.status='D' THEN 'NA'
ELSE 'R' END)
FROM @tempTable t
LEFT JOIN @tempStatus ts ON t.PatientId=ts.PatientId
它返回我的数据作为
场景:
Country PatientId Status
India 1 A
是否有人可以帮助您忽略case语句中的重复项。似乎您需要将
case
表达式包装在MAX
中:
选择t.国家/地区,
t、 PatientId,
MAX(当ts.status='A'然后1 ELSE 0 END时的情况)作为status--使其变短
来自@attreable t
左连接@tempStatus ts ON t.PatientId=ts.PatientId
按t.国家分组,
t、 PatientId;
您正在寻找基于某些条件的连接的某种不同结果。如果我读了5遍后就知道了
DECLARE @tempTable TABLE(Country VARCHAR(10),PatientId INT)
INSERT INTO @tempTable VALUES ('India',1), ('Foo', 2) -- added dummy
-- renamed PatientId to PId for easier writing
DECLARE @tempStatus TABLE(PId INT, status VARCHAR(2))
-- added dummy data
INSERT INTO @tempStatus VALUES (1,'NA'),(1,'A'),(1,'D'),(1,'R'),(1,'A'),(2,'NA'),(2,'D'),(2,'R')
SELECT DISTINCT -- only unique rows
Country,
t.PatientId,
-- only D is replaced in your example with NA, else default status
CASE WHEN ts.status = 'D' THEN 'NA' ELSE ts.status END AS Status
FROM @tempTable t
LEFT JOIN @tempStatus ts ON
( -- first condition
(SELECT DISTINCT status FROM @tempStatus WHERE status = 'A' and PId = PatientId) IS NOT NULL
AND PId = PatientId and status = 'A'
) OR
( -- second condition
(SELECT DISTINCT status FROM @tempStatus WHERE status = 'A' and PId = PatientId) IS NULL
AND PId = PatientId
)
- PatientId 1将只返回一行,并带有
- Patientid2将返回两行NA和R
MIN
而不是MAX
。但是,如果'A'
不在数据中,您也不会说明需要发生什么。@Larnu它将把该状态作为一行。但如果有“A”,则只需要一张记录。我将用场景再次更新我的问题。