基于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