tsql - 在同一列上使用两个 Count() 的问题
问题描述
我试图在同一列上获得两个不同的计数。这两个计数在单独的查询中工作正常,但我只是不确定如何将它们放在一个查询中。我有两张桌子,分别是DailyFieldRecord
和AB953
。DailyFieldRecord
包含:DailyFieldRecordID
和ActivityCodeID
。该AB953
表包含:DailyFieldRecordID, ItemID, and GroupID
。Count1
将返回DailyfieldrecordID's
包含ActivityCodeID=387
andGroupID=260
和 DON'T have的计数ItemID in (1302,1303,1305,1306)
。Count2
将返回DailyfieldrecordID's
包含ActivityCodeID=387
andGroupID=260
和 HAVE的计数ItemID in (1302,1303,1305,1306)
。所以它们是相似的,但我只是不确定如何将它们组合成一个查询。我在两个约束之间的 where 子句中放置了一个 OR,我知道这是错误的,但我只是不确定如何执行此操作。
DailyFieldRecord: AB953:
DailyFieldRecordID ActivityCodeID DailyFieldRecordID: ItemID: GroupID:
657 387 657 1305 210
888 420 657 1333 260
672 387 657 1335 260
888 1302 210
888 1336 260
672 1327 260
672 1334 260
672 1335 260
Expected Output:
Count1: Count2:
3 2
Count1 is supposed to count: Count2 is supposed to count:
672 1327 260 657 1333 260
672 1334 260 657 1335 260
672 1335 260
SELECT COUNT(ActivityCodeID) as Count1, COUNT(ActivityCodeID) As Count2
FROM AB953 ab
JOIN DailyFieldRecordID dfr on
dfr.DailyFieldRecordID=ab.DailyFieldRecordID
WHERE dfr.ActivityCodeID=387 and ab.GroupID=260 and NOT exists(
select b.DailyFieldRecordID
FROM DailyFieldRecordID b
WHERE ab.DailyFieldRecordID = b.DailyFeildRecordID AND
b.ItemID in (1302,1303,1305,1306))
OR
dfr.ActivityCodeID=387 and ab.GroupID=260 and exists(
select b.DailyFieldRecordID
FROM DailyFieldRecordID b
WHERE ab.DailyFieldRecordID = b.DailyFeildRecordID AND
b.ItemID in (1302,1303,1305,1306))
解决方案
首先找到DailyFieldRecordID
for ItemID in (1302,1303,1305,1306)
(Query 1) 的列表,然后将查询合并到您的最终查询中。
查询一:
SELECT AB1.DailyFieldRecordID,SUM(CASE WHEN AB1.ItemID IN (1302,1303,1305,1306) THEN 1 ELSE 0 END)
FROM AB953 AB1
GROUP BY AB1.DailyFieldRecordID
最终查询:
SELECT SUM(CASE WHEN EX=0 THEN 1 ELSE 0 END) AS COUNT1,SUM(EX) AS COUNT2
FROM AB953 ab
INNER JOIN DailyFieldRecord dfr
ON dfr.DailyFieldRecordID = ab.DailyFieldRecordID
LEFT JOIN ( SELECT AB1.DailyFieldRecordID,SUM(CASE WHEN AB1.ItemID IN (1302,1303,1305,1306) THEN 1 ELSE 0 END) AS EX
FROM AB953 AB1
GROUP BY AB1.DailyFieldRecordID) T
ON dfr.DailyFieldRecordID = T.DailyFieldRecordID
WHERE dfr.ActivityCodeID = 387
AND ab.GroupID = 260
推荐阅读
- json - 尝试创建地图但以 JQ 中的 List 结尾
- python-3.x - 为 Python3 设置 SublimeText……这个命令有什么作用?
- typescript - 带有通用键和常规键的打字稿对象?
- postgresql - 特定元素的 JSONB 数组更新
- python - 将函数应用于 DataFrame 列的字典理解
- excel - excel vba userform设置数量值不能小于0
- javascript - Testcafe Selector 没有在 React Modal 中获取元素
- c# - 如何计算所有元素都是字符串的矩阵的行列式?
- api - 认证微服务解耦
- tfs - 是否可以为本地 TFS 2018 设置代理发布代理?