sql - 获取 Sql-Server 中逗号分隔值中未分组列的详细信息
问题描述
我想获得所有三个表格详细信息的 lvdays 总和大于 30 的员工休假。无法为此找到出路。
员工 :
empcode| MNGR_CODE| MNGR_CODE2
-------|----------|-----------
AA | bb | cc
FF | bb | cc
lvtype :
typeid| desc
------|---------
1 | casual
离开 :
leaveid| empcode| lvdays| typeid| Flag| date | reason
-------|--------|-------|-------|-----|-----------|---------
1 | AA | 2 | 1 | 1 | 11-02-2020| NULL
2 | AA | 3 | 1 | 1 | 02-11-2019| NULL
3 | FF | 4 | 1 | 1 | 23-12-2019| NULL
这是我正在尝试构建但无法实现目标的查询。
SELECT MNGR_CODE,
MNGR_CODE2,
lt.desc,
l.reason,
l.leaveID
FROM Leave l
INNER JOIN lvtype lt ON l.typeid = lt.typeid
LEFT OUTER HASH JOIN employee em ON em.Emp_Code = l.empcode
WHERE empcode IN ('AA', 'FF')
AND leaveID IN (SELECT leaveID
FROM Leave l
INNER JOIN lvtype lt ON l.typeid = lt.typeid
WHERE l.empcode IN ('AA', 'FF')
GROUP BY l.empcode
HAVING SUM(lvdays) > 30);
解决方案
如果我正确地跟随你,你可以使用窗口函数:
select *
from (
select
e.mngr_code,
e.mngr_code2,
lt.desc,
l.reason,
l.leaveid,
sum(l.lvdays) over(partition by e.empcode) sum_lvdays
from leave l
inner join lvtype lt on l.typeid = lt.typeid
inner join employee em on em.emp_code = l.empcode
) t
where sum_lvdays > 30
子查询基于您现有的查询,并添加了一个附加列,该列对每个员工的所有休假进行窗口总和。外部查询使用窗口总和的结果作为过滤器。
我不确定您left join
在子查询中是否需要 a,所以我将其更改为inner join
.
推荐阅读
- c# - 如何找到没有值的 AD 属性的数据类型
- ruby - Ruby 中有默认的块参数吗?
- javascript - 应用问题时的jQuery
- python - 如何使用邮递员向 Django RestAPI 提供用户输入?
- json - 如何序列化/反序列化 ruby 散列/结构,对象作为 json 的键
- python - Python Pandas Dataframe 永久 cumprod
- javascript - 计算两个“”之间的字符串(数字),并将其替换为值的一半
- javascript - 基于内部对象值的传单标记颜色
- webpack - 找不到条目模块中的错误:错误:无法解析“xxxx”中的“xxxx”解析“xxxx”
- c++ - 当指向右值引用的指针时会发生什么