为什么我不能在WHERE子查询中使用D?
SELECT *
FROM dbo.Orders AS D
WHERE (SELECT COUNT(*)
FROM D) = 11;
答案 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子句等中