基于sql中的重复记录选择并分配值
我的数据如下:基于sql中的重复记录选择并分配值,sql,sql-server,tsql,ssis,lookup,Sql,Sql Server,Tsql,Ssis,Lookup,我的数据如下: Student_ID State 1 WI 1 IL 1 IL 2 WI 3 IL 4 IL 4 MN 我希望我的输出如下: 输出:如果同一学生同时处于WI和任何其他州,则我们需要将其称为“多个”,当学生仅处于WI时,则将其称为“InState”,当该学生处于任何其他州时,则将其称为“OUT state”。此
Student_ID State
1 WI
1 IL
1 IL
2 WI
3 IL
4 IL
4 MN
我希望我的输出如下:
输出:如果同一学生同时处于WI和任何其他州,则我们需要将其称为“多个”,当学生仅处于WI时,则将其称为“InState”,当该学生处于任何其他州时,则将其称为“OUT state”。此查询需要保留在SSIS查找中
Student ID Status
1 MULTIPLE
2 IN
3 OUT
4 OUT
请让我知道如何在SQL中实现此输出
谢谢一个开始我不确定第三个
有了工会,你可能不需要有明显的区别
select distinct T1.ID, 'multiple'
from table T1
join table T2
on T1.ID = T2.ID
and T1.State = 'WI'
and T2.State != 'WI'
union
select distinct T1.ID, 'in'
from table T1
left outer join table T2
on T1.ID = T2.ID
and T1.State = 'WI'
and T2.State != 'WI'
where T2.ID is null
union
select distinct T1.ID, 'out'
from table T1
left outer join table T2
on T1.ID = T2.ID
and T1.State != 'WI'
and T2.State = 'WI'
where T2.ID is null
你需要把它整理一下,但它应该能用
WITH x AS
-- eliminate all duplicates,set up a counter for each distinct record
-- as well as flag for WI
(SELECT DISTINCT studentID, STATE, 1 AS cnt, CASE WHEN STATE = 'WI' THEN 1 ELSE 0 END WI
FROM DataTable)
SELECT studentID,
CASE
WHEN MAX(wi) = 0 THEN 'OUT' -- this student is not in WI at all
WHEN MAX(wi) = 1 AND SUM(cnt) > 1 THEN 'MULTI' -- this student is in WI as well as another state
WHEN MAX(wi) = 1 AND SUM(cnt) = 1 THEN 'IN' END AS Status -- this student is in WI and and no other state
FROM x GROUP BY studentID
请提供您尝试过的查询,我们可以从那里继续帮助您。现在看来,你是在要求我们为你做工作……谢谢大家的回答。。有帮助
;WITH CTE AS
(
SELECT DISTINCT SID, [State],
Score =
CASE
WHEN [State] = 'WI' THEN 100
ELSE 1
END
FROM T
)
SELECT SID,
Status =
CASE
WHEN SUM(Score) > 100 THEN 'MULTIPLE'
WHEN SUM(Score) = 100 THEN 'IN'
ELSE 'OUT'
END
FROM CTE
GROUP BY SID