首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带枢轴和分组内连接的SQL SERVER查询

带枢轴和分组内连接的SQL SERVER查询
EN

Stack Overflow用户
提问于 2016-03-12 00:00:35
回答 1查看 69关注 0票数 0

我已经尝试过PIVOT方法和CASE WHEN,但是我还没有想出如何从我的表中得到这个结果。

这就是我们所需要的:

代码语言:javascript
复制
personnel_id  SATURDAY SUNDAY  MONDAY   TUESDAY   WEDNESDAY THURSDAY  FRIDAY
Juan Jose       OFF     OFF     6-2        6- 2      OFF      OFF      6-2

从这些表格中:

代码语言:javascript
复制
[TABLES FROM SQL SERVER][1]

到目前为止,我已经:

代码语言:javascript
复制
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;

返回以下结果:

结果

代码语言:javascript
复制
Juan Jose Moreno OFF    NULL    NULL NULL   NULL    NULL    NULL
Juan Jose Moreno NULL   OFF     NULL NULL   NULL    NULL    NULL
Juan Jose Moreno NULL   NULL    6-2  NULL   NULL    NULL    NULL
Juan Jose Moreno NULL   NULL    NULL 6-2    NULL    NULL    NULL
Juan Jose Moreno NULL   NULL    NULL NULL   OFF     NULL    NULL
Juan Jose Moreno NULL   NULL    NULL NULL   NULL    OFF     NULL
Juan Jose Moreno NULL   NULL    NULL NULL   NULL    NULL    6-2

我需要找到一种很好的方法,或者找到一种只按一行分组的方法,并去掉空值。

谢谢你们的时间和努力

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-12 00:03:16

我想你只是想要有条件的聚合:

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35952013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档