2011-11-10 77 views
0

在我的query.I选择这种方式所有工作计数全名。t-sql子查询和groupby

SELECT COUNT(sy.FullName)      [Count Job], 
     sy.FullName        [FullName], 
     MIN(CAST(i.vrp_notificationdate AS DATE)) [Oldest Date] 
FROM BusinessUnit AS b 
     INNER JOIN SystemUser AS sy 
     ON b.BusinessUnitId = sy.BusinessUnitId 
     INNER JOIN Incident AS i 
     ON i.OwnerId = sy.SystemUserId 
GROUP BY f.sy.FullName 

该查询显示该表

--------------------------------- 
Count Job FullName Oldest Date 
    10   a  2011-10-11 
    20   B  2011-10-11 
    55   C  2011-10-11 
--------------------------------- 

,但我想使下表为例子。

-------------------------------------------------------------- 
Count Job FullName Oldest Date  Open Job   Close Job 
    10   A  2011-10-11   5    5 
    20   B  2011-10-11   13    7 
    55   C  2011-10-11   48    7 
------------------------------------------------------------ 

我有我的事件表列名的状态,如果状态码是5个作业是closed.when我使用GROUP BY条件的StatusCode,那么表。而根据我不想秀这显示表。

--------------------------------- 
Count Job FullName Oldest Date 
    10   a  2011-10-11 
    13   B  2011-10-11 
    48   C  2011-10-11 
    7   B  2011-10-11 
    7   C  2011-10-11 
--------------------------------- 

当我在我的T-SQL使用union,我把这个错误“的所有查询使用UNION合并,交叉或EXCEPT运营商必须在其目标列表中的表达式的数目相等。”

如何正确解决这个查询。任何建议。

谢谢。

+1

我修正了查询的格式,但是无效。它有2个“GROUP BY”子句。 –

+0

谢谢,我再次编辑我的查询。 – engcmreng

回答

2

如何使用CASE和SUM?

SELECT COUNT(sy.FullName)      [Count Job], 
     sy.FullName        [FullName], 
     MIN(CAST(i.vrp_notificationdate AS DATE)) [Oldest Date], 

     SUM(CASE i.status 
      WHEN 5 THEN 1 
      ELSE 0)        [Open Jobs], 

     SUM(CASE i.status 
      WHEN 5 THEN 0 
      ELSE 1)        [Closed Jobs] 

FROM BusinessUnit AS b 
     INNER JOIN SystemUser AS sy 
     ON b.BusinessUnitId = sy.BusinessUnitId 
     INNER JOIN Incident AS i 
     ON i.OwnerId = sy.SystemUserId 
GROUP BY f.sy.FullName 
+0

谢谢@古斯塔夫,我不知道如何处理案件。再次感谢。 – engcmreng

+0

当所有其他都失败时,请尝试阅读手册:) [CASE(Transact-SQL)](http://msdn.microsoft.com/en-us/library/ms181765.aspx) –

+0

:),再次感谢。 – engcmreng