无法在WHERE子查询中使用派生表

时间:2017-08-15 03:00:33

标签: sql-server tsql

为什么我不能在WHERE子查询中使用D?

SELECT * 
FROM dbo.Orders AS D
WHERE (SELECT COUNT(*) 
       FROM D) = 11;

2 个答案:

答案 0 :(得分:0)

这根本就不是一个有效的语法......即使它是,你也不会得到任何结果,除非你的Orders表中只有11行。

我猜你正在寻找类似以下的东西......

WITH 
    cte_OrderCount AS (
        SELECT 
            *,
            OrderCount = COUNT(*) OVER (PARTITION BY o.CustomerID)
        FROM 
            dbo.Orders o
        )
SELECT 
    *
FROM 
    cte_OrderCount oc
WHERE 
    oc.OrderCount = 11;

答案 1 :(得分:0)

不确定你想要做什么,所以我猜。但如果表有11行,则返回表的所有行:

select * from dbo.Orders where exists(select 1 from dbo.Orders having COUNT(*) = 11) 

或许你是在追求这样的事情:

如果你需要"加入"使用计数表,您可以使用APPLY。 e.g:

select c.*, o.* from 
(select COUNT(*) as cc from dbo.Orders) c outer apply
(select * from dbo.Orders) o 
WHERE c.cc = 11

上面的SELECT COUNT(*)行将始终返回1行。 " c"然后派生表外部应用orders表。然后你可以使用" c"和" o"在WHERE子句等中