2013-12-17 28 views
0

我有時間的地獄搞清楚如何總量這兩個查詢的總結:總結計數(與GRO​​UP BY)

select t.processed as title, count(t.processed) as ckos 
from circ_longterm_history clh, title t 
where t.bib# = clh.bib# 
and clh.cko_location = 'dic' 
group by t.processed 
order by ckos DESC 

select t.processed as title, count(t.processed) as ckos 
from circ_history ch, title t, item i 
where i.item# = ch.item# 
and t.bib# = i.bib# 
and ch.cko_location = 'dic' 
group by t.processed 
order by ckos DESC 

基本上我想有一列的結果集爲t.processed另一列是第一個計數加上第二個計數的總和。

任何想法?

+0

是'在'title' t.processed'獨特之處?我們可以得到樣本數據和目標結果嗎?我假設你想要的結果也是按't.processed'匹配的,而不是'第一行',正如'ORDER BY'所暗示的。 –

+0

t.processed實際上並不是唯一的。我正在尋找將circ_history和circ_longterm_history中的匹配的所有t.processed加起來 – Marc

回答

0

我認爲以下應工作(雖然我沒有樣本數據來測試它反對...):

SELECT t.processed as title, 
     COALESCE(SUM(clh.count), 0) + COALESCE(SUM(ch.count), 0) as ckos 
FROM Title t 
LEFT JOIN (SELECT bib#, COUNT(*) as count 
      FROM Circ_Longterm_History 
      WHERE cko_location = 'dic' 
      GROUP BY bib#) clh 
     ON clh.bib# = t.bib# 
LEFT JOIN (SELECT i.bib#, COUNT(*) as count 
      FROM Item i 
      JOIN Circ_History ch 
      ON ch.item# = i.item# 
      WHERE ch.cko_location = 'dic' 
      GROUP BY i.bib#) ch 
     ON ch.bib# = t.bib# 
GROUP BY t.processed 
ORDER BY ckos DESC 
+0

這個和費薩爾的解決方案似乎非常接近我所尋找的,但數字還是有點偏離。這很難解釋,因爲我正在處理一個相當龐大而複雜的數據庫。如果您可以瞭解Faisal與您的解決方案之間的結果可能略有不同,那麼我可以填補我理解中的一些空白。 – Marc

+0

它可能與從2查詢到1 - @ faisal的答案要求每個'Title.bib#'在_both_'_History'表中,我的_doesn't_要求它在任何一個。哪一個是對的取決於你需要什麼。您的原始版本可能會從查詢1中獲取所有內容,然後僅包括查詢2中也包含在查詢1中的結果(因此,查詢2中的任何不在查詢1中的內容都將被忽略。要獲得更多幫助,請更新您的問題樣本起始數據和期望的結果 –

+0

啊,是的,這是有道理的,我肯定希望總結所有條目的計數,不管title.bib#是否在這兩個表中,你的解決方案是可取的。 – Marc

0
SELECT A.title, A.ckos +B.ckos as ckos from 
(select t.processed as title, count(t.processed) as ckos 
from circ_longterm_history clh, title t 
where t.bib# = clh.bib# 
and clh.cko_location = 'dic' 
group by t.processed 
) as A inner join 

(select t.processed as title, count(t.processed) as ckos 
from circ_history ch, title t, item i 
where i.item# = ch.item# 
and t.bib# = i.bib# 
and ch.cko_location = 'dic' 
group by t.processed 
) as B on A.title =B.title order by ckos DESC 
0
; WITH CTE AS (
    SELECT T.PROCESSED AS TITLE, T.PROCESSED AS CKOS 
    FROM dbo.CIRC_LONGTERM_HISTORY CLH 
    INNER JOIN dbo.TITLE T 
    WHERE T.[BIB#] = CLH.[BIB#] 
     AND CLH.CKO_LOCATION = 'DIC' 

    UNION ALL 

    SELECT T.PROCESSED AS TITLE, T.PROCESSED AS CKOS 
    FROM dbo.CIRC_HISTORY CH 
    INNER JOIN dbo.ITEM I 
     ON I.[ITEM#] = CH.[ITEM#] 
    INNER JOIN dbo.TITLE T 
     ON T.[BIB#] = I.[BIB#] 
    WHERE CH.CKO_LOCATION = 'DIC' 
) 
SELECT TITLE, COUNT(*) AS CKOS 
FROM CTE 
GROUP BY TITLE 
ORDER BY CKOS DESC 
+0

與此錯誤有一些誤差: – Marc

+0

Msg 156,Level 15,State 1,Line 5 關鍵字'WHERE'附近的語法不正確。 Msg 102,Level 15,State 1,Line 17 ')'附近的語法不正確。 – Marc

+0

你運行的是哪個版本的sql server? –

0

我不知道這是否會幫助你或不

,如果你想從2查詢的總和,我通常做這樣的

比如有一個表像這樣:

id  name  
1  jenny  
2  jack 
 
select count(id) as id, name 
from table 
group by name 
union all 
select count(id) as id, name 
from table 
group by name 

如果WO ULD出現這樣的:

id name 

1  jenny 

1  jenny 

2  jack 

2  jack 

所以,如果你想總結的ID 只是這樣做:

select sum(id), name 
from (select count(name) as id, name from table group by name 
     UNION ALL 
     select count(name) as title, name from table group by name)aa 
group by name 

所以看上去像這樣:

sum name 

2  jenny 

2  jack 

但是,如果你用UNION代替UNION ALL 結果會是這樣的:

sum name 

1  jenny 

1  jack