一尘不染

显示喜欢sql

sql

我的查询是我有两个表,其中一个sec_users用以下字段调用:

pk_user, name, days_available

另一个solicitud带有以下字段的呼叫:

pk_solicitud, fk_empleado, n_dias

fk_empleadosolicitudpk_user对的外键sec_users

好吧,我有一个小报告,其中显示了每个用户剩余的空闲天数,但我也想向您显示并以相同的查询显示该用户所请求的天数

例如,休假24天的user1创建一个应用程序,并要求4个休息日和另外10天。除了剩余的24-4-10 =
14天的休息日之外,我还希望您显示给我,您还必须告诉我您已经使用的天数:24-14 =消耗的天数为10。我有以下代码,但它给了我我不想要的数字:

SELECT u.pk_user, u.dias_disponibles - sum(s.n_diassolicitados) AS dias_libres, (SELECT SUM(N_DIASSOLICITADOS) as dias_disfrutados FROM solicitud)
FROM sec_users u, solicitud s
WHERE s.fk_empleado = u.pk_user
GROUP BY u.pk_user

此功能向我展示了这一点:

Usuario             dias_libres   dias_disfrutados
==============    ==============  ==============
Usuario 1                10              79

您必须向我展示:

Usuario             Dias libres   Dias disfrutados
==============    ==============  ==============
Usuario 1                10              14

因为它不显示。


阅读 200

收藏
2021-03-08

共1个答案

一尘不染

我怀疑您想要:

SELECT u.pk_user,
       (u.dias_disponibles - COALESCE(dias_disfrutados, 0)) AS dias_libres,
       COALESCE(dias_disfrutados, 0)
FROM (SELECT u.*,
             (SELECT SUM(N_DIASSOLICITADOS)
              FROM solicitud s
              WHERE s.fk_empleado = u.pk_user
             ) as dias_disfrutados
      FROM sec_users u 
     ) u;

笔记:

  • 请勿FROM子句中使用逗号。 始终 使用正确的显式JOIN语法。
  • 您似乎不需要外部聚合。
  • 计算一次所需的值,然后在需要的地方使用它。
2021-03-08