2016-01-13 29 views
0

我最近接管了一個職位來管理多個數據庫並創建多個報表。大型選擇字段選項限制我的計數功能

我目前正在從以前的員工中分離出來的報告是在MS Visual Studio中開發的。嘗試從Demo_Chapter_Events.CE_EVENT_TYPE列中獲取總計數,以返回基於filter ='SOCIAL'的總數。

對於GROUP BY,COUNT()返回多個錯誤。是否有更簡單的方法將COUNT()函數與所有其他SELECT(ed)行一起使用?提前致謝。當前報告代碼列在下面。

SELECT  Name.ID AS Expr2, Name.MEMBER_TYPE, Name.STATUS, Name.COMPANY, Demo_Chapter.CH_UNIVERSITY, CONVERT(VARCHAR(10), 
         Demo_Chapter.CH_INSTALLED_DATE, 101) AS ChInstlDate, CONVERT(VARCHAR(10), Demo_Chapter.CH_INACTIVE_DATE, 101) AS ChInctvDate, 
         CONVERT(VARCHAR(10), Demo_Chapter.CH_SEC_INACTIVE_DATE, 101) AS ChSecDate, CONVERT(VARCHAR(10), Demo_Chapter.CH_REINSTALLED_DATE, 101) 
         AS ChReInstall, CONVERT(VARCHAR(10), Demo_Chapter.CH_THIRD_INSTALL, 101) AS ThrdInstall, CONVERT(VARCHAR(10), Demo_Chapter.CH_FOURTH_INSTALL, 
         101) AS FrthInstall, CONVERT(VARCHAR(10), Demo_Chapter.CH_TH_INACTIVE_DATE, 101) AS ThInctvDate, Demo_Chapter.CH_TH_INACTIVE_REASON, 
         CONVERT(VARCHAR(10), Demo_Chapter.CH_FR_INACTIVE_DATE, 101) AS FrInctvDate, Demo_Chapter.CH_FR_INACTIVE_REASON, 
         Demo_Chapter.CH_CARNEGIE_BASIC, Demo_Chapter.CH_CARNEGIE_SS, Demo_Chapter.CH_CARNEGIE_UNDER, Demo_Chapter.CH_CARNEGIE_ENROLL, 
         Demo_Chapter.CH_ATHL_CONF, Demo_Chapter.CH_UG_ENROLL, Demo_Chapter.CH_NUM_WMN_STUD, Demo_Chapter.CH_SEC_INACTIVE_REASON, 
         Demo_Chapter.CH_INACTIVE_REASON, Demo_Chapter.CH_RECRUIT_TIME, Demo_Chapter.CH_TERMS, Demo_Academic.AA_CHAPTER_GPA, 
         Demo_Academic.AA_TERM, Demo_Academic.AA_YEAR, CONVERT(VARCHAR(10), Demo_Chapter_Events.CE_EVENT_DATE, 101) AS EvntDate, 
         Demo_Chapter_Events.CE_EVENT_TYPE 
FROM   Name INNER JOIN 
         Demo_Chapter ON Name.ID = Demo_Chapter.ID INNER JOIN 
         Demo_Chapter_Events ON Name.ID = Demo_Chapter_Events.ID LEFT OUTER JOIN 
         Demo_Academic ON Name.ID = Demo_Academic.ID 
WHERE  (Name.MEMBER_TYPE = 'CCHP') AND (Name.STATUS IN ('A', 'SUSP')) AND (Demo_Academic.AA_TERM = 'SPRING') AND (Demo_Academic.AA_YEAR = '1415') AND 
         (Demo_Chapter_Events.CE_EVENT_DATE BETWEEN CONVERT(DATETIME, '2015-08-01 00:00:00', 102) AND CONVERT(DATETIME, '2015-12-31 00:00:00', 102)) AND (Demo_Chapter_Events.CE_EVENT_TYPE = 'SOCIAL') 
+1

mySQL或SQL服務器? – xQbert

+0

SQL,我相信我在MS Visual Studio中工作。謝謝。 –

+0

樣本的預期結果將幫助我在這裏..因爲我很困惑,如果你總結'社會'你需要有ce_event_Type返回,因爲它將永遠是'社會',或者你是否期待其他值存在與該ID爲0的計數? – xQbert

回答

0

重新格式化您的代碼以實現可讀性:使用內聯視圖來獲取ce_Event_Types的數量並且僅限於社交活動;將該表的所有限制標準移至該內嵌視圖。

這種方法消除了由於狂犬病問題引起的人爲計數膨脹問題。

SELECT Name.ID AS Expr2 
, Name.MEMBER_TYPE 
, Name.STATUS 
, Name.COMPANY 
, Demo_Chapter.CH_UNIVERSITY 
, CONVERT(VARCHAR(10), Demo_Chapter.CH_INSTALLED_DATE, 101) AS ChInstlDate 
, CONVERT(VARCHAR(10), Demo_Chapter.CH_INACTIVE_DATE, 101) AS ChInctvDate 
, CONVERT(VARCHAR(10), Demo_Chapter.CH_SEC_INACTIVE_DATE, 101) AS ChSecDate 
, CONVERT(VARCHAR(10), Demo_Chapter.CH_REINSTALLED_DATE, 101) AS ChReInstall 
, CONVERT(VARCHAR(10), Demo_Chapter.CH_THIRD_INSTALL, 101) AS ThrdInstall 
, CONVERT(VARCHAR(10), Demo_Chapter.CH_FOURTH_INSTALL, 101) AS FrthInstall 
, CONVERT(VARCHAR(10), Demo_Chapter.CH_TH_INACTIVE_DATE, 101) AS ThInctvDate 
, Demo_Chapter.CH_TH_INACTIVE_REASON 
, CONVERT(VARCHAR(10), Demo_Chapter.CH_FR_INACTIVE_DATE, 101) AS FrInctvDate 
, Demo_Chapter.CH_FR_INACTIVE_REASON 
, Demo_Chapter.CH_CARNEGIE_BASIC 
, Demo_Chapter.CH_CARNEGIE_SS 
, Demo_Chapter.CH_CARNEGIE_UNDER 
, Demo_Chapter.CH_CARNEGIE_ENROLL 
, Demo_Chapter.CH_ATHL_CONF 
, Demo_Chapter.CH_UG_ENROLL 
, Demo_Chapter.CH_NUM_WMN_STUD 
, Demo_Chapter.CH_SEC_INACTIVE_REASON 
, Demo_Chapter.CH_INACTIVE_REASON 
, Demo_Chapter.CH_RECRUIT_TIME 
, Demo_Chapter.CH_TERMS 
, Demo_Academic.AA_CHAPTER_GPA 
, Demo_Academic.AA_TERM 
, Demo_Academic.AA_YEAR 
, CONVERT(VARCHAR(10), Demo_Chapter_Events.CE_EVENT_DATE, 101) AS EvntDate 
, DEC.CE_EVENT_TYPE 
, DEC.cnt 
FROM Name 
INNER JOIN Demo_Chapter 
    ON Name.ID = Demo_Chapter.ID 
INNER JOIN (SELECT id, count(CE_EVENT_TYPE) as cnt, CE_EVENT_TYPE 
      FROM Demo_Chapter_Events 
      WHERE CE_EVENT_TYPE = 'SOCIAL' 
       AND Demo_Chapter_Events.CE_EVENT_DATE BETWEEN 
        CONVERT(DATETIME, '2015-08-01 00:00:00', 102) 
       AND CONVERT(DATETIME, '2015-12-31 00:00:00', 102) 
      GROUP BY id, CE_EVENT_TYPE) DCE 
    ON Name.ID = DCE.ID 
LEFT OUTER JOIN Demo_Academic 
    ON Name.ID = Demo_Academic.ID 
WHERE (Name.MEMBER_TYPE = 'CCHP') 
    AND (Name.STATUS IN ('A', 'SUSP')) 
    AND (Demo_Academic.AA_TERM = 'SPRING') 
    AND (Demo_Academic.AA_YEAR = '1415') 
+0

我正在計數Demo_Chapter_Events.CE_EVENT_TYPE等於'SOCIAL',並將它們顯示爲Name.Company的總金額,以便有一列顯示該類型(SOCIAL)的事件總數。公司。那有意義嗎?感謝您的答覆。 –

+0

我想我需要一些示例數據來顯示問題,因爲我認爲問題在於連接會導致您的計數被人爲誇大。根據您的查詢,我認爲我們可以簡單地統計加入之前的事件,否定因狂歡而導致的虛增記錄。我刺了什麼,我認爲你想要什麼,但我不知道。 (創建內嵌視圖並將限制條件移至該內嵌視圖。) – xQbert

+0

這是一個屏幕截圖。在重複社交這個詞的權利是我試圖獲得這類事件總數的地方。但是對於特定的Name.COMPANY,這些行不斷重複。我正在尋找一個INT總數作爲與'COMPANY'相關的Name.COMPANY相關信息的一行。 [鏈接] http://imgur.com/OFy9hYv –