2014-10-20 117 views
-1

我想通過計算其他子查詢返回的行來加入子查詢計數。 我的問題是我不知道如何/如何可以公開REP_ID(與MONTH_COUNT)加入我的主要查詢。使用計數時在子查詢中加入子查詢

INNER JOIN 
(SELECT COUNT(*) AS MONTH_COUNT 
FROM 
(
SELECT REP_ID, COUNT(MONTH(COMP_DT)) AS COUNT_ 
FROM dattbl_Case AS MONTH_ 
WHERE ([email protected]_TYPE) AND COMP_DT > DATEADD(MONTH,-12,GETDATE()) AND COMP_DT <= DATEADD(MONTH,-1,GETDATE()) 
GROUP BY MONTH(COMP_DT), REP_ID 
) AS MONTH__ 
) AS MONTHS_ 
ON EXPIRE_.REP_ID=? 
+1

你有沒有嘗試過使用WHERE而不是像這樣的INNER JOIN:WHERE EXPIRE_.REP_ID = MONTH_.REP_ID? – kiks73 2014-10-20 15:46:07

+0

現在您唯一的選擇是加入ON EXPIRE_.REP_ID = MONTHS_.MONTH_COUNT。清楚問問題! – 2014-10-20 15:59:47

+0

我的問題是爲什麼子查詢的子查詢沒有暴露給主查詢加入。問題很明顯。看到我的答案,你會看到我只是沒有引用適當的子查詢層次結構。 – CliffyB 2014-10-20 16:19:03

回答

1

我想你想要這樣的:

INNER JOIN 
(SELECT REP_ID, COUNT(DISTINCT MONTH(COMP_DT)) AS COUNT_ 
FROM dattbl_Case AS MONTH_ 
WHERE CASE_TYPE = @CASE_TYPE AND COMP_DT > DATEADD(MONTH, -12, GETDATE()) AND 
     COMP_DT <= DATEADD(MONTH,-1,GETDATE()) 
GROUP BY REP_ID 
) AS MONTHS_ 
ON EXPIRE_.REP_ID = MONTHS_.REP_ID 

這一提法假定幾個月都在同一年度內。如果您想要計數大於12,則需要包括年份和月份。

+0

我只是沒有通過父查詢暴露/引用REP_ID。不過謝謝。 – CliffyB 2014-10-20 16:23:11

+0

@pcpimpster。 。 。我不明白你的評論。這不是你想要做的嗎? – 2014-10-20 21:42:17

+0

只是跑了你的查詢,是的,它和我糾正的查詢一樣好,你的實際上更簡單。謝謝。我太專注於我使用的附加子查詢。 +1的答案。 – CliffyB 2014-10-21 12:48:59

0

這是更正後的解決方案。我只是沒有將子查詢公開給父子查詢,然後加入到主查詢中。

INNER JOIN 
(SELECT MONTH__.REP_ID, COUNT(*) AS MONTH_COUNT 
FROM 
(
SELECT MONTH_.REP_ID, COUNT(MONTH(COMP_DT)) AS COUNT_ 
FROM dattbl_Case AS MONTH_ 
WHERE ([email protected]_TYPE) AND COMP_DT > DATEADD(MONTH,-12,GETDATE()) AND COMP_DT <= DATEADD(MONTH,-1,GETDATE()) 
GROUP BY MONTH(COMP_DT), REP_ID 
) AS MONTH__ 
GROUP BY MONTH__.REP_ID 
) AS MONTHS_ 
ON EXPIRE_.REP_ID=MONTHS_.REP_ID