2013-03-18 71 views
-1

我被卡住了,需要建议。 这可能很简单,但是,我是初学者,想尽快学习,所以请耐心等待。 我有一个包含“A”/“P”格式考勤数据的表格。我试图在报告中显示一个班级内有多少人在日期范围内错过了三次或更多次。大多数情况下,我有SQL语句执行所有工作,但有一个例外。我可以显示某人错过了多少次的总和,但我无法弄清楚如何仅显示缺课时间超过3次的学生。IIF声明帮助 - 总和值大于或等于

=SUM(IIF(Fields!Attendance.Value ="A",1,NOTHING))

如果我写这样的表达: 我进入上我想要的数据,在返回列的表达式如下

=SUM(IIF(Fields!Attendance.Value ="A",1,NOTHING))>=3

我得到TRUE/FALSE返回。如果我可以弄清楚如何只显示TRUE的回报,那就没问题了。

任何意见是赞赏!

我的整个SQL语句 - 还有两个其他数据集被调用来将数据拉入到这个数据集中。

SELECT  smgp_group.group_id 
    , smgp_group.group_name 
    , core_v_person_basic.last_name + ', ' + core_v_person_basic.nick_name as Name 
    , core_v_person_basic.birth_date AS Birthdate 
    , '*' + CONVERT(varchar, core_v_person_basic.person_id) + '*' AS person_id 
    , core_v_person_basic.street_address_1 
    , core_v_person_basic.city + ',' + core_v_person_basic.state + ' ' + core_v_person_basic.postal_code AS Citystatezip 
    , core_v_person_basic.home_phone 
    , core_v_person_basic.email 
    , core_lookup.lookup_value AS [Group Role] 
    , CATD.occurrence_end_time 
    , CATD.Attendance as attendance 
    , MAX(CATD.DateLastAttended) AS Datelastattended 
    , CATD.occurrence_end_time AS [Start Date] 
    , CATD.occurrence_end_time AS [End Date] 
    , '*$' + CONVERT(varchar, CATD.occurrence_id) + '*' AS 'occurrence_id' 
    , core_v_person_basic.cell_phone 
FROM smgp_group 
    INNER JOIN cust_v_attendanceroll AS CATD 
    INNER JOIN core_lookup ON CATD.role_luid = core_lookup.lookup_id 
    INNER JOIN core_v_person_basic ON CATD.person_id = core_v_person_basic.person_id ON smgp_group.group_id = CATD.group_id 
where CATD.occurrence_end_time between @startdate AND @enddate and smgp_group.group_id IN (@group) 
GROUP BY smgp_group.group_id, smgp_group.group_name, core_v_person_basic.last_name,core_v_person_basic.nick_name, core_v_person_basic.birth_date, core_v_person_basic.street_address_1, 
         core_v_person_basic.city + ',' + core_v_person_basic.state + ' ' + core_v_person_basic.postal_code, core_v_person_basic.home_phone, 
         core_v_person_basic.email, core_lookup.lookup_value, CATD.occurrence_end_time, CATD.Attendance, CATD.occurrence_id, core_v_person_basic.person_id, 
         core_v_person_basic.cell_phone 
HAVING attendance = 'A' 
ORDER BY attendance 
+0

您正在使用哪个版本的Microsoft Excel? – Octopus 2013-03-18 18:40:19

+0

你可以发布你的整个查询,并解释一点。如果有人错过了三次以上的课程,你只想显示记录吗? – DevelopmentIsMyPassion 2013-03-18 18:40:44

+0

这是你想在Excel或SQL? – DevelopmentIsMyPassion 2013-03-18 18:41:22

回答

0

想要试试这个吗?

道岔:你可能要检查: 两个[Start Date][End Date]设置为CATD.occurrence_end_time

SELECT  * 
FROM  (
     SELECT  smgp_group.group_id 
       , smgp_group.group_name 
       , core_v_person_basic.last_name + ', ' + core_v_person_basic.nick_name as Name 
       , core_v_person_basic.birth_date AS Birthdate 
       , '*' + CONVERT(varchar, core_v_person_basic.person_id) + '*' AS person_id 
       , core_v_person_basic.street_address_1 
       , core_v_person_basic.city + ',' + core_v_person_basic.state + ' ' + core_v_person_basic.postal_code AS Citystatezip 
       , core_v_person_basic.home_phone 
       , core_v_person_basic.email 
       , core_lookup.lookup_value AS [Group Role] 
       , CATD.occurrence_end_time 
       , MAX(CATD.DateLastAttended) AS Datelastattended 
       , CATD.occurrence_end_time AS [Start Date] 
       , CATD.occurrence_end_time AS [End Date] 
       , '*$' + CONVERT(varchar, CATD.occurrence_id) + '*' AS 'occurrence_id' 
       , core_v_person_basic.cell_phone 

       , COUNT(*) AS absentCount 

     FROM  smgp_group 
       INNER JOIN cust_v_attendanceroll AS CATD 
       INNER JOIN core_lookup ON CATD.role_luid = core_lookup.lookup_id 
       INNER JOIN core_v_person_basic ON CATD.person_id = core_v_person_basic.person_id ON smgp_group.group_id = CATD.group_id 
     WHERE  CATD.occurrence_end_time BETWEEN @startdate AND @enddate 
       AND smgp_group.group_id IN (@group) 
       AND CATD.Attendance = 'A' 
     GROUP BY smgp_group.group_id, smgp_group.group_name, core_v_person_basic.last_name,core_v_person_basic.nick_name, core_v_person_basic.birth_date, core_v_person_basic.street_address_1, 
       core_v_person_basic.city + ',' + core_v_person_basic.state + ' ' + core_v_person_basic.postal_code, core_v_person_basic.home_phone, 
       core_v_person_basic.email, core_lookup.lookup_value, CATD.occurrence_end_time, CATD.occurrence_id, core_v_person_basic.person_id, 
       core_v_person_basic.cell_phone 
     ) AS tblSource 
WHERE  absentCount>=3 
+0

查询不会运行。当我尝试预览报告时,我会看到空白屏幕。我删除了所有的experssions,并将它们添加回来以确保我没有遗漏任何东西。 – user2183577 2013-03-18 21:06:56

+0

你是什么意思黑屏?你在SQL服务器上运行这个还是?它至少应该给你一些输出。 – 2013-03-19 04:48:18

+0

Visual Studio中报表中的空白屏幕,以及直接在SQL上运行的屏幕。列填充,但不返回数据。 – user2183577 2013-03-19 14:54:02