Sql server 行合计结果在where子句中

Sql server 行合计结果在where子句中,sql-server,Sql Server,我试图只选择总数超过10个案例的名称,但我不确定如何选择 ,TT2 AS ( SELECT VENDOR_ID ,VEND_NAME ,VEND_ADRLN1 ,VEND_ADRLN2 ,VEND_CITY ,VEND_STATE ,VEND_ZIP ,COUNTY_NAME ,CONTRACT ,MEMBERS FROM FINAL UNION ALL SELECT VENDOR_ID ,VEND_NAME ,NULL VEND_ADRLN1 ,NULL VEND_ADRLN2 ,NULL

我试图只选择总数超过10个案例的名称,但我不确定如何选择

,TT2 AS
(
SELECT VENDOR_ID
,VEND_NAME
,VEND_ADRLN1
,VEND_ADRLN2
,VEND_CITY
,VEND_STATE
,VEND_ZIP
,COUNTY_NAME
,CONTRACT
,MEMBERS
FROM FINAL

UNION ALL

SELECT VENDOR_ID
,VEND_NAME
,NULL VEND_ADRLN1
,NULL VEND_ADRLN2
,NULL VEND_CITY
,NULL VEND_STATE
,NULL VEND_ZIP
,NULL COUNTY_NAME
,NULL CONTRACT
,SUM(MEMBERS) 
FROM FINAL
GROUP BY VENDOR_ID
,VEND_NAME
)


,SH4 AS
(
SELECT * FROM TT2 
)


SELECT * FROM SH4 ORDER BY 2,CASE WHEN VEND_ADRLN1 IS NULL THEN 'ZZ' ELSE VEND_NAME END,8
上面的代码返回第一张图片。我想保留行中超过10个的名称的总数,但当我将其添加到条件中时,它只显示包含10个或更多的行,而不是该名称的所有行。我想返回第二张图中有10行或更多行的所有行


首先尝试单独使用GROUP BY查询。添加一个HAVING SUM()>=10,将其限制为您想要的值。(如果您愿意,可以稍后执行此操作。)

然后在第二个查询中,将上面的“TT2”与FINAL合并到TT2。每个供应商都有一个而且只有一个TT2记录,所以内部连接可以工作。如果存在,则也可以使用


如果希望避免在order by中使用大小写,您可以添加一个新列来order on。

假设您有SQL Server 2012或更高版本,您应该能够使用SQL Server窗口函数SUM()来实现所需的功能

WITH TT2 AS
(
SELECT VENDOR_ID
,VEND_NAME
,VEND_ADRLN1
,VEND_ADRLN2
,VEND_CITY
,VEND_STATE
,VEND_ZIP
,COUNTY_NAME
,CONTRACT
,MEMBERS
-- TOTAL_MEMBERS column will calculate total members by Vendor_Id & name 
-- via SQL windowing function. This will be used to filter the result set later
,TOTAL_MEMBERS = SUM(MEMBERS) OVER (PARTITION BY VENDOR_ID, VEND_NAME)
FROM FINAL
)
SELECT * 
FROM TT2 
WHERE TOTAL_MEMBERS > 10

非常感谢。非常感谢。