【问题标题】:SQL : Get Column table twice with differents clause whereSQL:使用不同的子句获取两次列表
【发布时间】:2018-09-04 14:43:07
【问题描述】:

我尝试使用不同的子句两次在同一个表中获取同一列:

我的查询:

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 

结果:

想要的结果:

我的目标是两次获得同一列“max(currentcount)”并应用不同的 where 子句,以便获得两个名为 (A & B) 的列,并且我还需要在第一列中显示日期,可以请你帮忙?谢谢

【问题讨论】:

  • MySQL 还是 Microsoft SQL Server?
  • Microsoft SQL Server
  • 你想要这个max(currentcount) as A, max(currentcount) as B还是这个max(case when foo=bar then currentcount end) as A, max(case when bar=foo then currentcount end) as B
  • 听起来您正在寻找自加入 - 如果您向下滚动一下,此链接有一个示例:w3schools.com/sql/sql_join_self.asp
  • 我想要第二个选择,比如 max(currentcount) as a when ... 和 max(currentcount) as b when ...

标签: sql sql-server tsql where-clause


【解决方案1】:

由于AB 之间的唯一区别是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

【讨论】:

    猜你喜欢
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-20
    相关资源
    最近更新 更多