2014-07-15 73 views
0

我有此查詢:需要一列的數量,如果我有另一列值的多個

select qos.orgname, qos.org, qos.suborg, qos.Archive, qos.location, count(c.coe) AS DEPT, c.coe AS DEP, 
     qos.siteid, qos.admin as sitelead, 
     CASE When qos.Archive = 0 THEN 'Active' 
     when qos.Archive is null THEN '-'    
     ELSE 'Archived' 
     END AS STATUS 
     from qryOrgsite qos WITH (NOLOCK) 
     LEFT JOIN ltbcoe c WITH (NOLOCK) on qos.orgname = c.orgname and qos.location=  c.location 
     group by qos.orgname, qos.location, qos.org, qos.suborg, qos.Archive, c.coe, 
     qos.siteid, qos.ADMIN 

這給了我一些記錄如下: records

所以我想的數「部門」列是活躍的。我的意思是它應該只返回一行與組織B和部門7 ...例如,這裏部門列應該是7.

這意味着我要c.coe列的數量。

回答

1

您可以在另一個包裹查詢:

select orgname, count(*) 
from (
select qos.orgname, qos.org, qos.suborg, qos.Archive, qos.location, count(c.coe) AS DEPT, c.coe AS DEP, 
     qos.siteid, qos.admin as sitelead, 
     CASE When qos.Archive = 0 THEN 'Active' 
     when qos.Archive is null THEN '-'    
     ELSE 'Archived' 
     END AS STATUS 
     from qryOrgsite qos WITH (NOLOCK) 
     LEFT JOIN ltbcoe c WITH (NOLOCK) on qos.orgname = c.orgname and qos.location=  c.location 
     group by qos.orgname, qos.location, qos.org, qos.suborg, qos.Archive, c.coe, 
     qos.siteid, qos.ADMIN) t1 
where t1.orgname = 'Organization B' and t1.STATUS = 'Active' 
group by t1.orgname 
+0

它拋出了錯誤: 列't1.orgname'在選擇列表中無效,因爲它不包含在聚合函數或GROUP BY子句中。 – Vasu

+0

@Vasu我的錯誤。編輯。 – Vulcronos

2

這裏的問題是你的GROUP BY太包容性。查詢要求的是計數,但結果必須由GROUP BY中的所有列唯一。如果你只是想每一個ORGNAME計數,你需要做

SELECT qos.orgname, COUNT(*) 
FROM qryOrgsite qos 
GROUP BY qos.orgname 

這本質上說,你想在ORGNAME計算所有行。您添加到該組的每個列都會爲您的COUNT創建唯一的組合。例如,如果按照組織名稱和位置進行分組,則會爲這兩列的每個組合提供一個捲起計數。根據你上面顯示的數據,這將導致

OrganizationB Demo-Fixe  1 
    OrganizationB GE CapitalP  3 
    OrganizationB Hadasa Plant 1 
    OrganizationB Mostoles Plant 1 
0

傢伙我已經得到了答案。 我必須從組中刪除部門名稱,並選擇 ,因爲count(c.coe)沒有任何效果。 感謝您的幫助

相關問題