проверить 2 первичных ключа в одной таблице - PullRequest
0 голосов
/ 15 февраля 2012

У меня есть таблица psc_Pro_Prof ProfessorPositions (ProfessorID, PositionID, StartDate, EndDate). У него есть 2 первичных ключа: ProfessorID, PositionID.

Я хочу проверить ProfessorID, PositionID нет в таблице для вставки. Я написал так:

вставка в CoreUIs.dbo.psc_Pro_Prof ProfessorPositions ( ProfessorID, PositionID, StartDate, EndDate )

select a.MaQuanLy,b.MaQuanLy,convert(smalldatetime,NgayHieuLuc),convert(smalldatetime,NgayHetHieuLuc) 

from inserted

inner join GiangVien a on a.MaGiangVien = inserted.MaGiangVien
inner join ChucVu b on b.MaChucVu = inserted.MaChucVu
where a.MaQuanLy not in (select ProfessorID  from CoreUIs.dbo.psc_Pro_ProfessorPositions)
and b.MaQuanLy not in (select PositionID  from CoreUIs.dbo.psc_Pro_ProfessorPositions)

Но это неправильно. Можете мне помочь? Спасибо всем.

Ответы [ 2 ]

1 голос
/ 15 февраля 2012
;WITH x AS
(
  SELECT TeacherID, ClassID, ClassStuID, s = [SUM],
    rn = ROW_NUMBER() OVER (PARTITION BY TeacherID ORDER BY ClassID)
  FROM dbo.TB1
)
SELECT TeacherID, ClassID, ClassStuID, 
  [SUM] = CASE rn WHEN 1 THEN s ELSE NULL END
FROM x
ORDER BY TeacherID, [SUM] DESC;
0 голосов
/ 15 февраля 2012

Вы можете использовать CTE с ROW_NUMBER () OVER (), чтобы идентифицировать первую строку каждого идентификатора учителя:

; with a as (
    select * from TB1
    union
    select * from TB2
)
, b as (
    select *, r=ROW_NUMBER()over(partition by a.TeacherID order by a.TeacherID, 
    a.ClassID, a.ClassStuID) from a
)
select b.TeacherID, b.ClassID, b.ClassStuID
, [SUM]=case b.r when 1 then b.[SUM] else null end
from b
order by b.TeacherID, b.r
go

Результат:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...