将变量设置为符合基于组的条件的行数,而不使用临时表

时间:2016-03-22 10:11:23

标签: sql sql-server

有没有办法在不使用临时表的情况下做我正在做的事情?

我需要根据查询分组返回计数<> 1的行数。我尝试用cte做这个,但我相信问题是cte末尾的第一个语句必须是一个select语句

IF OBJECT_ID('tempdb..#temp') IS NOT NULL DROP TABLE #temp
select * into #temp
from
(
select 
        count(*) as cnt
        ,aColumnToGroupBy
from 
        TableA
where 
        aDifferentColumn=1
group by 
        aColumnToGroupBy
)data

DECLARE @DUB INT
SET @DUB = (select COUNT(*) from #temp where cnt<>1)

PRINT @DUB

1 个答案:

答案 0 :(得分:1)

您可以使用HAVING子句:

DECLARE @DUB INT
SET @DUB = (SELECT COUNT(*) 
            FROM (
              SELECT aColumnToGroupBy, COUNT(*)
              FROM TableA
              WHERE aDifferentColumn = 1
              GROUP BY aColumnToGroupBy
              HAVING COUNT(*) <> 1) AS t)

@DUB变量将设置为等于人口与aColumnToGroupBy不同的1组的数量。