SQL: дважды получить таблицу столбцов с предложением дифференцирования - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь получить один и тот же столбец в одной и той же таблице дважды с разными предложениями:

Мой запрос:

SELECT 
    * 
FROM
    (SELECT TOP 10 
         CONVERT(DATE, attemptdate) AS Date, 
         Max(currentcount) AS A 
     FROM   
         logintracking 
     INNER JOIN 
         maxuser ON logintracking.loginid = maxuser.loginid 
     INNER JOIN 
         site ON site.siteid = maxuser.defsite 
     WHERE  
         attemptdate BETWEEN @dateDebut AND @dateFin 
         AND logintracking.clientaddr IN ('10.118.254.21', '10.118.254.156') 
     GROUP BY 
         CONVERT(DATE, attemptdate) 
     ORDER BY 
         CONVERT(DATE, attemptdate) ASC
    ) AS T1, 
    (SELECT TOP 10 
         CONVERT(DATE, attemptdate) AS Date, 
         MAX(currentcount) AS B 
     FROM   
         logintracking 
     INNER JOIN 
         maxuser ON logintracking.loginid = maxuser.loginid 
     INNER JOIN 
         site ON site.siteid = maxuser.defsite 
     WHERE  
         attemptdate BETWEEN @dateDebut AND @dateFin 
         AND logintracking.clientaddr = '10.118.254.35' 
     GROUP BY 
         CONVERT(DATE, attemptdate) 
     ORDER BY 
         CONVERT(DATE, attemptdate) ASC) AS T2 

Результат:

enter image description here

Желаемый результат:

enter image description here

Моя цель состоит в том, чтобы дважды получить один и тот же столбец 'max (currentcount)' и применить различные условия where, чтобы получить два столбца с именами (A & B), и мне также нужно показать дату в первом столбце, можно пожалуйста помогите? Спасибо

1 Ответ

0 голосов
/ 04 сентября 2018

Поскольку единственное различие между A и B состоит в logintracking.clientaddr, вы можете поместить это условие в оператор CASE в функции MAX:

SELECT CONVERT(DATE, attemptdate) AS Date, 
    MAX(CASE WHEN logintracking.clientaddr IN ( '10.118.254.21', '10.118.254.156' ) THEN currentcount END) AS A,
    MAX(CASE WHEN logintracking.clientaddr IN ( '10.118.254.35' ) THEN currentcount END) AS B
FROM logintracking 
    INNER JOIN maxuser 
        ON logintracking.loginid = maxuser.loginid 
    INNER JOIN site 
        ON site.siteid = maxuser.defsite 
WHERE attemptdate BETWEEN @dateDebut AND @dateFin
GROUP BY CONVERT(DATE, attemptdate) 
ORDER BY CONVERT(DATE, attemptdate) ASC
...