2014-06-10 44 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