2

下面是我的确切代码。此查询非常有效,除非在日期范围内不存在 teamid。如果在指定的日期范围内不存在 teamid,我希望 SQL 将 teamid 添加到表中并将其计数设置为 0。然后,我的表会自动将 teamid 转换为我的 teamtext。

SELECT tn.teamtext, COUNT(referteamID2) AS cnt
FROM teamnames AS tn
JOIN caseaudit AS ca
ON tn.teamID = ca.referteamID2
WHERE CONVERT(smalldatetime,dModLast,101) BETWEEN '2012-03-01' AND '2012-03-10'
AND ca.referteamid1 <> ca.referteamid2
AND teamid IN (99, 107, 124, 27, 31, 44, 110, 43, 57, 50, 46)
GROUP BY tn.teamtext
ORDER BY tn.teamtext

这将返回:

4H BOSS                59
ASSET MANAGEMENT       16
BOSS                   5
CUSTOMER SUPPORT       133
NETWORK ENGINEERING    15
PRODUCTION ENGINEERING 142
SECURITY               6
VOICE SERVICES         21
XEROX                  8

有人告诉我,这个问题可能与在给出日期限制后使用 IN 有关。

4

2 回答 2

2

将条件从 WHERE 子句移至 SELECT 中的 CASE 语句:

SELECT tn.teamtext,
       sum(case when CONVERT(smalldatetime,dModLast,101) BETWEEN '2012-03-01' AND '2012-03-10' 
                then 1 else 0
           end) AS cnt
FROM teamnames AS tn JOIN
     caseaudit AS ca
     ON tn.teamID = ca.referteamID2
WHERE ca.referteamid1 <> ca.referteamid2 AND
      teamid IN (99, 107, 124, 27, 31, 44, 110, 43, 57, 50, 46)
GROUP BY tn.teamtext
ORDER BY tn.teamtext 
于 2012-06-01T18:07:51.900 回答
1

您可以尝试使用外部连接,但我不确定这是否是一种有效的方法:

SELECT tn.teamtext, SUM(case when ca.referteamID2 is null then 0 else 1) AS cnt
FROM teamnames AS tn
LEFT OUTER JOIN caseaudit AS ca
ON tn.teamID = ca.referteamID2
WHERE CONVERT(smalldatetime,dModLast,101) BETWEEN '2012-03-01' AND '2012-03-10'
AND ca.referteamid1 <> ca.referteamid2
AND teamid IN (99, 107, 124, 27, 31, 44, 110, 43, 57, 50, 46)
GROUP BY tn.teamtext
ORDER BY tn.teamtext
于 2012-06-01T18:32:42.470 回答