2014-06-10 40 views
0

好的 - 希望有人可以帮助,因为我在这里挣扎。已尝试使用sum(case when),count(*),子查询没有成功。 基本上我有两个查询,我试图合并成一个,由相同的参数分组。查询:在一个查询中结合两个计数与连接

查询1:

SELECT 
u.username, 
count(*) as 'Total' 

FROM log1 L1 
JOIN users u on u.userref = L1.userref 
WHERE L1.date between @FromDate and @ToDate 
GROUP BY u.username 
ORDER BY u.username 

问题2:

SELECT 
u.username, 
count(*) as 'Total' 

FROM log2 L2 
LEFT JOIN users u on u.userref = L2.userref 
WHERE L2.date between @FromDate and @ToDate and L2.message like '%None%' 
GROUP BY u.username 
ORDER BY u.username 

我想是使用用户名柱(u.username),示出的结果的列的单个查询查询1的结果以及显示查询2的结果的列。任何帮助感谢!

回答

1

你可以把一个case语句count函数里面只能算当某些条件得到满足:

SELECT u.username, 
     Total = COUNT(*), 
     Total2 = COUNT(CASE WHEN L.message LIKE '%None%' THEN 1 END) 
FROM log1 AS L 
     JOIN users AS u 
      ON u.userref = L.userref 
WHERE L.date BETWEEN @FromDate and @ToDate 
GROUP BY u.username 
ORDER BY u.username; 

值得注意的是:

编辑

完全错过了,你有两个单独的日志表:

SELECT u.username, 
     Total = COUNT(Count1), 
     Total2 = COUNT(Count2) 
FROM ( SELECT l.UserRef, Count1 = 1, Count2 = NULL 
      FROM log1 AS L 
      WHERE L.date BETWEEN @FromDate and @ToDate 
      UNION ALL 
      SELECT l.UserRef, Count1 = NULL, Count2 = 1 
      FROM log2 AS L 
      WHERE L.date BETWEEN @FromDate and @ToDate 
      AND  L.message LIKE '%None%' 
     ) AS l 
     JOIN users AS u 
      ON u.userref = L.userref 
GROUP BY u.username 
ORDER BY u.username; 
+0

我在哪里放了的log 2的加入? – Mato

+0

对不起,错过了他们是不同的表格。我添加了一个替代解决方案。 – GarethD

0
  SELECT X.USERNAME,X.TOTAL,Y.TOTAL 
    FROM(SELECT 
      u.username, 
      count(*) as 'Total' 
      FROM log1 L1 
      JOIN users u on u.userref = L1.userref 
      WHERE L1.date between @FromDate and @ToDate 
      GROUP BY u.username 

      ) as x 
INNER JOIN 
      (
      SELECT 
      u.username, 
      count(*) as 'Total' 
      FROM log2 L2 
      LEFT JOIN users u on u.userref = L2.userref 
      WHERE L2.date between @FromDate and @ToDate and L2.message like '%None%' 
      GROUP BY u.username 
      ) AS Y ON Y.USERNAME = X.USERNAME 
+0

“由于某种原因,关键字'SELECT'附近的语法不正确......” – Mato

+0

找到了缺少的逗号,但现在它不像最后一行 – Mato

+0

@mato你是什么意思,它看起来不像最后一行? – gh9