sql - SQL 使用前 5 个结果作为过滤器
问题描述
我需要找出 SQL 机制以使用我用 CTE 计算的 5 个类别来过滤我的整体结果。当我用逗号“加入”时:从表中,结果会成倍增加。由于 cte 中的计数计算,我真的没有一个字段可以进行正确的连接。
我觉得它应该是 where 语句中的子查询,但我有 5 个结果,我认为它只适用于 1 个结果。
我已经尝试过(尽我所能)cte,各种子查询,有,存在
工作 CTE:
DECLARE @END VARCHAR(25)='2021-04-04 23:59:59.000' --Sunday
DECLARE @START DATEtime = DATEADD(DD,-364,@END)
;With CTE as (
Select Top 5
TIER_3
,COUNT(INCIDENT_NUMBER) AS CTE_Count
FROM vIncidentTickets
WHERE LAST_RESOLVED_DATE between @START and @END
AND GROUP = 'Cell'
AND COMPANY = 'HQ'
AND ORGANIZATION = 'CSS'
GROUP BY TIER_3
ORDER BY COUNT(INCIDENT_NUMBER) DESC
)
--选择部分没有提供正确的结果
Select
INCIDENT_NUMBER
,CTE.TIER_3
FROM vIncidentTickets,CTE
WHERE LAST_RESOLVED_DATE between @START and @END
AND GROUP = 'Cell'
AND COMPANY = 'HQ'
AND ORGANIZATION = 'CSS'
我希望 CTE 结果过滤 Select 查询。
解决方案
不要使用逗号加入。使用JOIN
关键字的标准将近30年了,习惯并使用它。
通过INNER JOIN
特别使用,很明显您没有包含任何关联两个表的条件(无连接谓词)。
试试这个...
Select
v.INCIDENT_NUMBER
,CTE.TIER_3
FROM
vIncidentTickets AS v
INNER JOIN
CTE
ON CTE.TIER_3 = v.TIER_3
WHERE
v.LAST_RESOLVED_DATE between @START and @END
AND v.GROUP = 'Cell'
AND v.COMPANY = 'HQ'
AND v.ORGANIZATION = 'CSS'
(您的原始查询有效地使用了CROSS JOIN
.)
推荐阅读
- php - 在 Laravel 中查找具有用户名的用户?
- c# - Swagger 不识别 .net core 3.0 引入的 JsonPropertyName
- javascript - 根据其他父级删除另一个父级中的表格行元素
- javascript - 使用触发器('resize')退出时面板全屏失败
- mysql - 是否可以通过远程 MYSQL 数据库调用或触发 AWS lambda?
- android - 如何在 GridView 适配器中保持视图状态?
- azure-data-factory - 想要在 ADF 管道中获取数据块活动的输出,以便我可以在进一步的 ADF 活动中使用这些输出参数
- c - 在 main() 之前、之后或内部声明函数有什么好处吗?
- asp.net-core - asp.net core 3.0 Signal R 立即断开连接
- jquery - 如何在时刻js中添加和格式化日期