在另一列中使用计算列,这是一个查询本身

时间:2013-10-30 05:02:34

标签: sql sql-server-2008 tsql

我刚才有一个案例需要在另一列查询的WHERE中使用计算列

我需要做这样的事情:

SELECT CONVERT(Date, RequestedOn) AS [Date], 
    COUNT(*), 
    (SELECT COUNT(*) FROM CalculatorLog WHERE CONVERT(Date, RequestedOn) = [Date] AND <other_static_conditions>) AS [Count]
    FROM CalculatorLog
    Group by CONVERT(Date, RequestedOn) Order by [Date] DESC

我正在尝试在SELECT语句的第二列中实现此功能。但它的错误是Invalid Column name [Date]

那么有什么可行的解决方法呢? 我能想到的是创建一个视图,如果有任何这样的用例到达,我总是会这样做。

但对于这个数据库,我只有读访问权限。所以我不能为此目的在这个数据库上创建View。所以我只需要通过SELECT语句完成它。

3 个答案:

答案 0 :(得分:1)

用子查询中的CONVERT(Date,CL.RequestedOn)替换[Date]列,如

SELECT CONVERT(Date, CL.RequestedOn) AS [Date], 
    (SELECT COUNT(*) FROM CalculatorLog WHERE CONVERT(Date, RequestedOn) = CONVERT(Date, CL.RequestedOn) AND <other_static_conditions>) AS [Count]
    FROM CalculatorLog CL
    Group by CONVERT(Date, CL.RequestedOn) Order by [Date] DESC

答案 1 :(得分:1)

只为条件加1,否则加0:

SELECT
  CONVERT(Date, RequestedOn) AS [Date], 
  COUNT(*), 
  SUM(CASE WHEN <other_static_conditions> THEN 1 ELSE 0 END) AS [Count]
FROM CalculatorLog
Group by CONVERT(Date, RequestedOn)
Order by [Date] DESC

答案 2 :(得分:0)

来自@Bohemian和@upendra的解决方案可以回答您的问题。我的回复是关于意见的用法。正如您所说,您不能再使用视图,因为您具有读访问权限,但您可以使用公用表表达式。