2016-01-13 31 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 –