0

次のステートメントの内部選択をフィルター処理すると、データのみが返されるクエリの最後に到達しようとしています。

作品:

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 行が返されます)

2番目のクエリで行が返されない理由と、それを回避できる方法があるかどうかを誰かが説明できますか?

および列が一意でないROW_NUMBER場合、それは非決定的であることを知っています(これは、内部選択のいくつかの行の場合です)。PARTITION BYORDER BY

当面の間、一時テーブルを使用して問題を再現できるかどうかを確認します。

4

1 に答える 1

1

2 番目のクエリの最初の項目 (つまり、Seq=1 の項目) には、%REG28% のような電子メールはありません。

于 2012-08-13T11:08:42.120 に答える