SQL添加新列以检查ID是否显示在另一个表中

SQL添加新列以检查ID是否显示在另一个表中,sql,sql-server,select,case,ssms,Sql,Sql Server,Select,Case,Ssms,我处理学生数据,有两个结构相同但数据集不同的表。我想添加一个记录为“0”或“1”的新列,以确定该学生是否出现在另一个表中。例如: Table 1: s_id s_year s_term s_crs NewColumn(was student enrolled in 2016?) 123456 2017 Fall Math 1010 1 654321 2017 Fall Eng 1010 0 Table 2: s_id s_yea

我处理学生数据,有两个结构相同但数据集不同的表。我想添加一个记录为“0”或“1”的新列,以确定该学生是否出现在另一个表中。例如:

Table 1:
s_id    s_year  s_term  s_crs       NewColumn(was student enrolled in 2016?)
123456  2017    Fall    Math 1010   1
654321  2017    Fall    Eng 1010    0

Table 2:
s_id    s_year  s_term  s_crs 
123456  2016    Fall    Math 2010
432516  2016    Fall    Eng 2010
你打算怎么做

SELECT s_id, s_year, s_term, s_crs 
(CASE 
    WHEN S_ID IN (select s_id from table2)
        THEN '1'

还是那种性质?我不确定如何使用联接编写此操作

您可以使用第二个表
左联接
,并查看结果列是否为空:

SELECT    t1.s_id, t1.s_year, t1.s_term, t1.s_crs, 
          CASE WHEN t2.s_id IS NOT NULL THEN 1 ELSE 0 END AS newcolum
FROM      table1 t1
LEFT JOIN table2 t2 ON t1.s_id = t2.s_id

假设
s_id
是一个公共标识符

SELECT t1.s_id, t1.s_year, t1.s_term, t1.s_crs, 1 as NewColumn
FROM table1 t1
WHERE EXISTS (SELECT 1 FROM Table2 t2 WHERE t1.s_id = t2.s_id)
UNION 
SELECT t1.s_id, t1.s_year, t1.s_term, t1.s_crs, 0 as NewColumn
FROM table1 t1
WHERE NOT EXISTS (SELECT 1 FROM Table2 t2 WHERE t1.s_id = t2.s_id)
你可以这样做

ALTER TABLE Table1 ADD NewColumn BIT NOT NULL DEFAULT (0)
此时,表1中的所有项目都将为0,现在您只需使用1更新所需的项目

UPDATE Table1
SET NewColumn = 1
WHERE ID IN (SELECT ID FROM Table2)

假设表1是结果。。。仅基于s_id和s_年份使用子查询。。。如果有其他要求,请更新OP

SELECT
  s_id,
  s_year,
  s_term,
  s_crs,
  ISNULL((SELECT
    1
  FROM table2 t2
  WHERE t2.s_id = t1.s_id
  AND t2.s_year = 2016), 0) [NewCol 2016]
FROM table1 t1
你可以使用左连接

SELECT    t1.s_id, t1.s_year, t1.s_term, t1.s_crs, 
          CASE WHEN t2.s_Year = '2016' THEN 1 ELSE 0 END AS [NewColumn(was student enrolled in 2016?)]
FROM      table1 t1
LEFT JOIN table2 t2 ON t1.s_id = t2.s_id
  create table #tbl1
  (
    s_id int,
    s_year varchar(4),
    s_term varchar(4),
    s_crs varchar (10)
  )

  insert into #tbl1 values(123456,'2017','Fall','Math 1010')
  insert into #tbl1 values(654321,'2017','Fall','Eng 1010')

  create table #tbl2
  (
    s_id int,
    s_year varchar(4),
    s_term varchar(4),
    s_crs varchar (10)
  )

  insert into #tbl2 values(123456,'2016','Fall','Math 2010');
  insert into #tbl2 values(432516,'2016','Fall','Eng 2010')


  select a.s_id,a.s_year,a.s_term,a.s_crs,case when b.s_id is null then '0' else '1' end as NewColumn
  from #tbl1 a left outer join #tbl2 b on a.s_id = b.s_id



  drop table #tbl1
  drop table #tbl2