Sql 在另一列中使用计算列,该列本身就是查询

Sql 在另一列中使用计算列,该列本身就是查询,sql,sql-server-2008,tsql,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 Calculato

我刚刚得到一个例子,需要在另一列查询的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语句的第二列中实现这一点。但说出无效的列名[日期]时出错

那么,这方面可能的解决办法是什么。。? 我能想到的一个方法是创建一个视图,如果有这样的用例出现,我总是这样做


但是对于这个数据库,我只有读取权限。因此,我无法为此目的在此数据库上创建视图。所以我只需要通过SELECT语句来完成它。

在子查询中将[Date]列替换为CONVERTDate,CL.RequestedOn,如下所示

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,否则为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

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

您尝试过使用临时表吗?没有。仅使用读访问权限的wld@AsshO.Lei我不确定,但你可以试试,从你的TableWithComputedColumn中使用Select*进入诱惑,然后从temtable中选择Computedcolumn看看会发生什么,你只是在那里使用selects。将[Date]值存储在一个变量中,然后使用它。不起作用:-@AsshO.Leu只是忘了在查询中放入主条件。。这类似于从CalculatorLog中选择COUNT*,其中CONVERTDate,RequestedOn=[Date]。这是对专栏的查询好的。。我得到了它。。我不需要把这当作另一个问题。这真是一个非常好的解决方案。。非常感谢。@shashwat不,我没有忘记。这个查询是正确的。原始查询没有where子句,因此此查询也不应该有where子句。子查询的where子句在case条件中捕获。