CREATE TABLE A (
A1 NVARCHAR(10), -- 公司代號
A2 NVARCHAR(10)); -- 車號
INSERT INTO A
VALUES
('1','A'),
('1','B'),
('1','C'),
('2','D'),
('2','E'),
('3','F'),
('4','H');
CREATE TABLE B (
B1 NVARCHAR(10), -- 異動單號
B2 NVARCHAR(10)); -- 車號
INSERT INTO B
VALUES
('a1','A'),
('a2','A'),
('a3','A'),
('a4','A'),
('a5','B'),
('a6','C'),
('a7','C'),
('a8','C');
CREATE TABLE C (
C1 NVARCHAR(10), -- 異動單號
C2 NVARCHAR(10)); -- 異動理由
INSERT INTO C
VALUES
('a1',N'轉換給1'),
('a2',N'轉換給2'),
('a3',N'轉換給3'),
('a4',N'退租'),
('a5',N'轉換給1'),
('a6',N'轉換給2'),
('a7',N'轉換給3'),
('a8',N'轉換給4');
SELECT A1 AS'公司代號',A2 AS '車號',C2 AS '異動理由'
FROM A
LEFT JOIN (
SELECT *,ROW_NUMBER() OVER (PARTITION BY B.B2 ORDER BY B1 DESC) AS ROWNUM
FROM B
) AS D ON D.B2=A.A2 AND D.ROWNUM=1
LEFT JOIN C ON C.C1=D.B1
ORDER BY CONVERT(INT,A1),A2
select 公司代號,車號
,(select top 1 異動理由 from Table b where b.車號=a.車號 order by 異動單號
desc) as 異動理由
from Table a
弄點不一樣的XD
declare @a table(
公司代號 int
,車號 nvarchar(10)
)
insert into @a
values('1','A')
,('1','B')
,('1','C')
,('1','D')
,('1','E')
,('1','F')
,('1','H')
declare @b table(
異動單號 int
,車號 nvarchar(10)
,異動理由 nvarchar(20)
)
insert into @b
values('1','A','轉換給1')
,('2','A','轉換給2')
,('3','A','轉換給3')
,('4','A','退租')
,('5','B','轉換給1')
,('6','C','轉換給2')
,('7','C','轉換給3')
,('8','C','轉換給4')
select 公司代號
,車號
,異動理由
from (
select 公司代號
,a.車號
,異動理由
,Row_Number()over(PARTITION BY a.車號 order by 異動單號 desc) Sort
from @a a
left join @b b on a.車號 = b.車號
) k
where Sort = 1
抱歉更新需求,請忽略討論的需求,請問SQL要怎麼寫?
恩~多了一個left join而已@@..
declare @a table(
公司代號 int
,車號 nvarchar(10)
)
insert into @a
values('1','A')
,('1','B')
,('1','C')
,('2','D')
,('2','E')
,('3','F')
,('4','H')
declare @b table(
異動單號 nvarchar(20)
,車號 nvarchar(10)
)
insert into @b
values('a1','A')
,('a2','A2')
,('a3','A3')
,('a4','A')
,('a5','B')
,('a6','C')
,('a7','C')
,('a8','C')
declare @ec table(
異動單號 nvarchar(20)
,異動理由 nvarchar(20)
)
insert into @ec
values('a1','轉換給1')
,('a2','轉換給2')
,('a3','轉換給3')
,('a4','退租')
,('a5','轉換給1')
,('a6','轉換給2')
,('a7','轉換給3')
,('a8','轉換給4')
select 公司代號
,車號
,異動理由
from (
select 公司代號
,a.車號
,異動理由
,Row_Number()over(PARTITION BY a.車號 order by b.異動單號 desc) Sort
from @a a
left join @b b on a.車號 = b.車號
left join @ec c on b.異動單號 = c.異動單號
) k
where Sort = 1