2017-09-25 1 views
1

Ich arbeite mit Studentendaten und habe zwei Tabellen mit der gleichen Struktur, aber verschiedene Datensätze. Ich möchte eine neue Spalte mit einem Eintrag von '0' oder '1' hinzufügen, um festzustellen, ob der Schüler in der anderen Tabelle erscheint oder nicht. Beispiel:SQL Hinzufügen einer neuen Spalte zu überprüfen, ob ID in einer anderen Tabelle

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 

Wie würden Sie dabei vorgehen?

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

oder etwas in der Art? Ich bin nicht sicher, wie dies schreiben mit einem Join

Antwort

1

Sie könnten left join mit der zweiten Tabelle und sehen, ob es die resultierende Spalte nicht null ist:

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 
0

die s_id Unter der Annahme eine gemeinsame Identifikator ist

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) 
0

können Sie tun, um diese

ALTER TABLE Table1 ADD NewColumn BIT NOT NULL DEFAULT (0) 

An dieser Stelle ein ll Ihre Einzelteile in der Table1 0 sein, jetzt nur Sie die benötigten Artikel aktualisieren mit 1

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

vorausgesetzt Tabelle 1 ist das Ergebnis ... mit Unterabfrage ausschließlich auf der Grundlage der s_id und s_year ... wenn Es gibt eine weitere Anforderung, bitte aktualisieren Sie 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 
0

Sie können mit LEFT JOIN

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 
0
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 
Verwandte Themen