sql - VBA 过程中的 SQL 子句帮助
问题描述
我有一个包含一个员工表(大约 80k)行的电子表格,我正在尝试查找专家员工(Skill_Prof = 5),他们是该分支机构中唯一具有该特定 Skill_Title 的人。到目前为止,我的代码是:
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
strFile = ThisWorkbook.FullName
strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile _
& ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cn.Open strCon
strSQL = "SELECT Branch, Skill_Title, Employee FROM [Employee$] WHERE Skill_Prof = 5"
rs.Open strSQL, cn
我的问题是试图确定我是否需要使用 COUNT、SUM 或其他函数来查找该分支机构中只有 1 名具有该 Skill_Title 的专家员工的情况。
有谁知道我怎么能做到这一点?
解决方案
与NOT EXISTS
:
SELECT e.Branch, e.Skill_Title, e.Employee
FROM [Employee$] AS e
WHERE e.Skill_Prof = 5
AND NOT EXISTS (
SELECT 1 FROM [Employee$]
WHERE Employee <> e.Employee AND Branch = e.Branch AND Skill_Title = e.Skill_Title AND Skill_Prof = e.Skill_Prof
)
或加入:
SELECT e.Branch, e.Skill_Title, e.Employee
FROM [Employee$] AS e INNER JOIN (
SELECT Branch, Skill_Title
FROM [Employee$]
GROUP BY Branch, Skill_Title
HAVING SUM(IIF(Skill_Prof = 5, 1, 0)) = 1
) AS g ON g.Branch = e.Branch AND g.Skill_Title = e.Skill_Title
WHERE e.Skill_Prof = 5
推荐阅读
- html - 为什么高度:100% 的 Flex-box 可以在除 Firefox 之外的所有浏览器中使用?
- c# - 使用 Hangfire 而不是 Tasks 执行异步操作
- mysql - mysql 按加入列分组太慢
- elasticsearch-aggregation - 使用弹性搜索版本:6.4.3。我想按一个字段(类型是日期)分组,几天之间有一个小时
- c# - 错误 CS0246 找不到类型或命名空间名称“Windows”(您是否缺少 using 指令或程序集引用?)
- spring - Spring Netflix Feign - HTTP 状态 404 - 未找到错误
- c# - 用户 DSN sql server ODBC 连接
- angular - 工具提示:ngbTooltip 不接受新行
- angular - 将无限滚动与虚拟滚动集成
- flutter - 分段条滚动条问题