我想知道是否有一种方法可以对单个select
进行以下查询。
select
z.a,
z.SumB
from (
select
X.a,
sum(X.b) over (partition by X.a) as SumB
from (
values
('hello',1),
('hello',2),
('goodbye',1)
) as X(a,b)
) as z
where
z.SumB > 1
;
我的想法是,如果我能更快地消除那些行,查询可能会得到更好的优化。
以下查询无效。
select
X.a,
sum(X.b) over (partition by X.a)
from (
values
('hello',1),
('hello',2),
('goodbye',1)
) as X(a,b)
having
sum(X.b) over (partition by X.a) > 1
;
信息8121,级别16,状态1,第11行在列“ X.a”中无效 HAVING子句,因为它既不包含在任何聚合中 函数或GROUP BY子句。
消息4108,级别15,状态1,第11行,窗口功能只能 出现在SELECT或ORDER BY子句中。
在基本查询中是否有更好的方法来限制这些结果?
答案 0 :(得分:2)
select
X.a,
SUM(x.B)
from (
values
('hello',1),
('hello',2),
('goodbye',1)
) as X(a,b)
GROUP BY X.a
HAVING SUM(b)>1
答案 1 :(得分:1)
您可以尝试以下操作
with cte as
(
select
X.a,
sum(X.b) over (partition by X.a) as total
from (
values
('hello',1),
('hello',2),
('goodbye',1)
) as X(a,b)
) select * from cte where total>1