我是 SQL Server 的新手,我有 3 個表考慮一個員工表
| 空的 | 姓名 | 地點 |
|---|---|---|
| 1 | 美國廣播公司 | 美國 |
| 2 | 電子煙 | 英國 |
另一個名為 location-table 的表
| 地點 | 假期代碼 |
|---|---|
| 英國 | 英國1 |
| 美國 | 美國1 |
還有holidaytable:
| 假期代碼 | 日期 | 型別 |
|---|---|---|
| 英國1 | 2022-01-01 | LM |
| 英國1 | 2022-01-01 | RMC |
預期結果是:
| 空的 | 地點 | 假期代碼 | 日期 | 1型 |
|---|---|---|---|---|
| 2 | 英國 | 英國1 | 2022-01-01 | RMC |
假設我根據 empid 和 date 查詢表,例如,empid 2 從特定日期開始的假期,這樣在特定日期(2022-01-01)我那天有 LM 和 RMC,我只需要 RMC,如果 RMC 不可用,否則 LMC。
uj5u.com熱心網友回復:
請試試這個
select e.empid, e.location, h.holidaycode, [date], max([type])
from employee e inner join location_table l
on e.location=l.location
inner join holidaytable h
on l.holidaycode=h.holidaycode
where e.empid=2 and h.[date]='2022-01-01'
group by e.empid, e.location, h.holidaycode, [date]
例子:
模式和插入陳述句:
create table employee(empid int, name varchar(50), location varchar(50));
insert into employee values(1, 'abc', 'USA');
insert into employee values(2, 'efg', 'UK');
create table location_table(location varchar(50),holidaycode varchar(50));
insert into location_table values('uk','uk1');
insert into location_table values('usa','usa1');
create table holidaytable(holidaycode varchar(50), [date] date, [type] varchar(50));
insert into holidaytable values('uk1', '2022-01-01', 'LM');
insert into holidaytable values('uk1', '2022-01-01', 'RMC');
詢問:
select e.empid, e.location, h.holidaycode, [date], max([type]) [type 1]
from employee e inner join location_table l
on e.location=l.location
inner join holidaytable h
on l.holidaycode=h.holidaycode
where e.empid=2 and h.[date]='2022-01-01'
group by e.empid, e.location, h.holidaycode, [date]
輸出:
| 空的 | 地點 | 假期代碼 | 日期 | 1型 |
|---|---|---|---|---|
| 2 | 英國 | 英國1 | 2022-01-01 | RMC |
db<>在這里擺弄
uj5u.com熱心網友回復:
您可以使用ROW_NUMBER僅獲取每個分組的第一行。
要么做ORDER BY type DESC要么使用ORDER BY CASE WHEN type = 'RMC' THEN 1 ELSE 2 END
SELECT
e.empid,
e.location,
l.holidaycode,
h.date,
h.type
FROM employee e
JOIN location l ON l.location = e.location
JOIN (
SELECT *,
rn = ROW_NUMBER() OVER (PARTITION BY h.holidaycode, h.date ORDER BY h.type DESC)
FROM holiday h
) h ON h.holidaycode = l.holidaycode AND h.rn = 1
WHERE h.date = '2022-01-01';
db<>小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/461151.html
