Sql server SQL:Msg 116,级别16,状态1,第1行当子查询没有引入EXISTS时,只能在select列表中指定一个表达式

Sql server SQL:Msg 116,级别16,状态1,第1行当子查询没有引入EXISTS时,只能在select列表中指定一个表达式,sql-server,tsql,select,Sql Server,Tsql,Select,请帮我解决这个问题 Msg 116,16级,状态1,第1行 当子查询未使用导入时,只能在选择列表中指定一个表达式 存在 这是我的问题 SELECT a.RegId, a.PropertyThumbnail FROM tblPropertyDetail a WHERE a.RegId NOT IN ( SELECT RegId, COUNT(RegId) AS NumOccurrence

请帮我解决这个问题

Msg 116,16级,状态1,第1行 当子查询未使用导入时,只能在选择列表中指定一个表达式 存在

这是我的问题

SELECT  a.RegId,
        a.PropertyThumbnail
FROM    tblPropertyDetail a
WHERE   a.RegId NOT IN 
        (
            SELECT  RegId,
                    COUNT(RegId) AS NumOccurrences
            FROM tblPropertyDetail
            GROUP BY RegId
            HAVING (COUNT(RegId) > 1)
        )

在子查询COUNTRegId中将此列作为numocurrences删除

使用NOT IN时,子查询返回的列数应该只有一列

或者,也可以使用JOIN执行此操作


在SQLServer2005+中,使用CTE和聚合窗口函数

;WITH cte AS
 (
  SELECT RegId, PropertyThumbnail, COUNT(*) OVER (PARTITION BY RegId) AS cnt
  FROM tblPropertyDetail
  )
  SELECT RegId, PropertyThumbnail
  FROM cte
  WHERE cnt <= 1

+1 CTE FTW,功能强大,通常使查询更易于阅读。
SELECT  a.RegId,
        a.PropertyThumbnail
FROM    tblPropertyDetail a
        LEFT JOIN
        (
            SELECT RegId, COUNT(RegId) AS NumOccurrences
            FROM tblPropertyDetail
            GROUP BY RegId
            HAVING (COUNT(RegId) > 1)
        ) b ON a.RegId = b.RegId
WHERE   b.RegId IS NULL
;WITH cte AS
 (
  SELECT RegId, PropertyThumbnail, COUNT(*) OVER (PARTITION BY RegId) AS cnt
  FROM tblPropertyDetail
  )
  SELECT RegId, PropertyThumbnail
  FROM cte
  WHERE cnt <= 1