在子查询和基本查询sql server中分组

时间:2010-12-23 12:02:14

标签: sql-server

我想知道以下是否可行。

我有一个表,我想要检索3列数据:

日,工作小时数,使用条件的小时数

我的查询是

SELECT     Day, SUM(Regular + Extra + Overtime) AS [Potential Hours],
                      (SELECT     SUM(Extra + Regular + Overtime) AS Expr1
                        FROM          dbo.TICPlus_Effort_Billable_Only
                        WHERE      (Manager NOT LIKE '%manager1%')) AS [Billed Hours]
FROM         Billable AS Billable1
GROUP BY Day

使用此查询,我获得每行的子查询中所有数据的总和,但我希望包含要按日分组的约束的子查询。是否有可能在子查询中有一个组来执行此操作,以便每天获得每日条件的总和?

希望有人能指出我正确的方向

3 个答案:

答案 0 :(得分:17)

不,你将无法做到这一点,因为SELECT列表中的SUB QUERY将返回更多的1值。

您需要在FROM子句的SUB查询中执行此操作

这样的东西
 SELECT Day, 
        SUM(Regular + Extra + Overtime) AS [Potential Hours],
        SubSum AS [Billed Hours]
FROM    Billable AS Billable1 LEFT JOIN
        (
            SELECT  Day,
                    SUM(Extra + Regular + Overtime) AS SubSum
            FROM    dbo.TICPlus_Effort_Billable_Only
            WHERE   (Manager NOT LIKE '%manager1%')
            GROUP BY Day
        ) s ON  Billable1.Day = s.Day
GROUP BY    Day

答案 1 :(得分:0)

SELECT
    DAY,
    SUM(Regular + Extra + Overtime) AS [ Potential Hours ],
    (
        SUM CASE WHEN Manager NOT LIKE '%manager1%' THEN(Extra + Regular + Overtime)
    END
) AS Expr1
FROM
    dbo.TICPlus_Effort_Billable_Only
GROUP BY
    DAY

答案 2 :(得分:0)

是的,你可以 “可以在任何允许使用表达式的地方使用子查询”As the doc says