我试图去查询的底部,如果我在内部选择以下语句仅过滤返回的数据,其中有:SQL数据才会返回
作品:
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_NUMBER
非determistic当PARTITION BY
和ORDER BY
列不是唯一的(这是在内部选择少数行的情况下)。
我会看看是否可以在临时表中使用临时表重新创建问题。
这是因为在所有记录已知之后,窗口函数被应用于记录。在第一种情况下,您正在检索过滤的记录并仅获取匹配,检索的行少于一秒。在第二种情况下,Seq = 1检索不同的记录。 – 2012-08-13 11:10:08
谢谢尼古拉现在对我有意义。 – woggles 2012-08-13 11:21:59