如果使用ROW_NUMBER过滤内部选择,则仅返回SQL数据

时间:2012-08-13 11:06:18

标签: sql sql-server-2008

我正试图找到一个查询的底部,如果我过滤了以下语句的内部选择,则只返回数据:

作品:

SELECT * FROM 
(
SELECT    
      [szPhoneNo] Email      
      ,ROW_NUMBER() OVER (PARTITION BY CLID ORDER BY t_clientphone.PhoneType_Id ASC) AS Seq       
  FROM [SLacsis_SLM].[dbo].[T_ClientPhone] t_clientphone INNER JOIN 
  [SLacsis_SLM].[dbo].[TL_PhoneType] PT ON t_clientphone.PhoneType_ID = PT.PhoneType_ID  
  WHERE t_clientphone.szPhoneNo LIKE '%reg28%'          
            ) T where T.Seq = 1 --AND Email LIKE '%reg28%'

(返回10行)

不起作用:

SELECT * FROM 
(
SELECT    
      [szPhoneNo] Email      
      ,ROW_NUMBER() OVER (PARTITION BY CLID ORDER BY t_clientphone.PhoneType_Id ASC) AS Seq       
  FROM [SLacsis_SLM].[dbo].[T_ClientPhone] t_clientphone INNER JOIN 
  [SLacsis_SLM].[dbo].[TL_PhoneType] PT ON t_clientphone.PhoneType_ID = PT.PhoneType_ID  
  --WHERE t_clientphone.szPhoneNo LIKE '%reg28%'            
            ) T where T.Seq = 1 AND Email LIKE '%reg28%'

(返回0行)

任何人都可以解释为什么第二个查询没有返回任何行,是否有办法可以解决它?

我知道ROW_NUMBERPARTITION BY列不唯一时ORDER BY是不确定的(内部选择中的一些行就是这种情况)。

我会看到我是否可以同时使用临时表重新创建问题。

1 个答案:

答案 0 :(得分:1)

第二个查询中的第一项(即:Seq = 1的那些项目)没有像%REG28%这样的电子邮件。