Sql server 具有透视和分组内部联接的SQL SERVER查询
我尝试了Sql server 具有透视和分组内部联接的SQL SERVER查询,sql-server,inner-join,Sql Server,Inner Join,我尝试了PIVOT方法和CASE WHEN方法,但我还没有从我的表格中找到这个结果 这就是我们需要的: personnel_id SATURDAY SUNDAY MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY Juan Jose OFF OFF 6-2 6- 2 OFF OFF 6-2 从这些表格中: [TABLES FROM SQL SERVER][1] 到目前为止,我已
PIVOT
方法和CASE WHEN
方法,但我还没有从我的表格中找到这个结果
这就是我们需要的:
personnel_id SATURDAY SUNDAY MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY
Juan Jose OFF OFF 6-2 6- 2 OFF OFF 6-2
从这些表格中:
[TABLES FROM SQL SERVER][1]
到目前为止,我已经:
SELECT
personnel_name,
CASE WHEN day_name = 'saturday' then entrada END AS SAT,
CASE WHEN day_name = 'sunday' then entrada END AS SUN,
CASE WHEN day_name = 'monday' then entrada END AS MON,
CASE WHEN day_name = 'tuesday' then entrada END AS TUE,
CASE WHEN day_name = 'wednesday' then entrada END AS WED,
CASE WHEN day_name = 'thursday' then entrada END AS THUR,
CASE WHEN day_name = 'friday' then entrada END AS FRI
FROM
(SELECT
personnel_name, tbl_shifts.entrada, tbl_days.day_name
FROM
tbl_personnel_weekshift
INNER JOIN
tbl_personnel ON tbl_personnel_weekshift.personnel_id = tbl_personnel.personnel_id
INNER JOIN
tbl_shifts ON tbl_personnel_weekshift.shift_id = tbl_shifts.shift_id
INNER JOIN
tbl_days ON tbl_personnel_weekshift.day_id = tbl_days.day_id) AS IIIPO;
返回以下结果:
我需要找到一个好的方法,或者找到一种只在一行中分组的方法,并去掉空值
感谢各位花费的时间和精力我想你们只需要条件聚合:
SELECT personnel_name,
MAX(CASE WHEN day_name = 'saturday' then entrada END) AS SAT,
MAX(CASE WHEN day_name = 'sunday' then entrada END) AS SUN,
MAX(CASE WHEN day_name = 'monday' then entrada END) AS MON,
MAX(CASE WHEN day_name = 'tuesday' then entrada END) AS TUE,
MAX(CASE WHEN day_name = 'wednesday' then entrada END) AS WED,
MAX(CASE WHEN day_name = 'thursday' then entrada END) AS THUR,
MAX(CASE WHEN day_name = 'friday' then entrada END) AS FRI
FROM (SELECT personnel_name, tbl_shifts.entrada, tbl_days.day_name
FROM tbl_personnel_weekshift INNER JOIN
tbl_personnel
ON tbl_personnel_weekshift.personnel_id = tbl_personnel.personnel_id INNER JOIN
tbl_shifts
ON tbl_personnel_weekshift.shift_id = tbl_shifts.shift_id INNER JOIN
tbl_days
ON tbl_personnel_weekshift.day_id = tbl_days.day_id
) IIIPO
GROPU BY personnel_name;
SELECT personnel_name,
MAX(CASE WHEN day_name = 'saturday' then entrada END) AS SAT,
MAX(CASE WHEN day_name = 'sunday' then entrada END) AS SUN,
MAX(CASE WHEN day_name = 'monday' then entrada END) AS MON,
MAX(CASE WHEN day_name = 'tuesday' then entrada END) AS TUE,
MAX(CASE WHEN day_name = 'wednesday' then entrada END) AS WED,
MAX(CASE WHEN day_name = 'thursday' then entrada END) AS THUR,
MAX(CASE WHEN day_name = 'friday' then entrada END) AS FRI
FROM (SELECT personnel_name, tbl_shifts.entrada, tbl_days.day_name
FROM tbl_personnel_weekshift INNER JOIN
tbl_personnel
ON tbl_personnel_weekshift.personnel_id = tbl_personnel.personnel_id INNER JOIN
tbl_shifts
ON tbl_personnel_weekshift.shift_id = tbl_shifts.shift_id INNER JOIN
tbl_days
ON tbl_personnel_weekshift.day_id = tbl_days.day_id
) IIIPO
GROPU BY personnel_name;