2017-08-16 21 views
0

我从查询发现计数值的总和而我做了类似下面使用多个SUM

SELECT 
    SUM(Total) AS SUMV 
FROM 
    (SELECT 
     COUNT(Session.SessionID) AS Total 
    FROM 
     [Session] 
    WHERE 
     DateCreated >='2016-03-20' 
     AND DateCreated <= '2016-03-22' 
    GROUP BY 
     CAST(DateCreated AS DATE)) s 

现在,我必须找到数的总和与不同的条件我试图让该和值如上表的第二列像下面

SELECT 
    SUM(Total) AS SUMV, SUM(Total2) AS SUMV2 
FROM 
    (SELECT 
     COUNT(Session.SessionID) AS Total 
    FROM 
     [Session] 
    WHERE 
     DateCreated >='2016-03-20' 
     AND DateCreated <= '2016-03-22' 
    GROUP BY 
     CAST(DateCreated AS DATE)) s, 
    (SELECT 
     COUNT(Session.SessionID) AS Total2 
    FROM 
     [Session] 
    WHERE 
     DateCreated >='2016-03-23' 
     AND DateCreated <= '2016-03-25' 
    GROUP BY 
     CAST(DateCreated AS DATE)) s2 

但SUM2没有返回正确的SUM值。那么,我的查询正确或使用的计数SUM多个实例在SQL查询

回答

1

你可以写第一个查询任何更好的办法:

SELECT COUNT(*) 
FROM [Session] s 
WHERE DateCreated >= '2016-03-20' AND DateCreated <= '2016-03-22'; 

可以使用条件聚集做多资金:

SELECT SUM(CASE WHEN DateCreated >= '2016-03-20' AND DateCreated <= '2016-03-22' 
      THEN 1 ELSE 0 
      END) AS Total_1, 
     SUM(CASE WHEN DateCreated >= '2016-03-23' AND DateCreated <= '2016-03-25' 
      THEN 1 ELSE 0 
      END) AS Total_2   
FROM [Session] s; 
+0

我们怎样才能使一个新的列在此查询值TOTAL_1-TOTAL_2的区别呢?因为Total_1,2字段实时生成我猜 –

+0

@JibinMathew。 。 。这不是你原来的问题的一部分。您可以使用子查询并按名称减去字段,也可以在它们之间用'-'重复表达式。 –