2012-02-15 16 views
-1

我有表psc_Pro_ProfessorPositions(ProfessorID,PositionID,StartDate,EndDate)。它有2個主鍵是ProfessorID,PositionID。在一張表中檢查2個主鍵

我要檢查ProfessorID,PositionID不表insert.I寫這樣的:

INSERT INTO CoreUIs.dbo.psc_Pro_ProfessorPositions ( ProfessorID,PositionID,起始日期,結束日期 )

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) 

但它是錯的。可以幫我嗎?謝謝大家。

+1

它不是完全清楚什麼你在做。你的兩個表似乎具有相同的結構。如果你向我們展示了你已經嘗試過的SQL,這將會有所幫助。 – Jason 2012-02-15 03:39:43

+0

有人按照stackoverflow標準格式化問題...我沒有權利這麼做:( – 2012-02-15 03:46:51

+0

我相信'70100G07.000051 | CD09CKM1 | CNC102040 | 90'應該是'70100G07.000051 | CD09CKM1 | CNC102040 | NULL '...首先應該是NULL,第二個應該是90 ... – 2012-02-15 03:49:50

回答

0

可以採用熱膨脹係數與ROW_NUMBER()OVER()來識別每個TeacherID的第一行:

; 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

+0

如此複雜:必須有簡單的方法... – 2012-02-15 05:52:00

+0

而那個更簡單的方法是...? – 2012-02-15 11:36:29

+0

亞倫回答我t ... – 2012-02-15 11:37:27

1
;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;