我試圖去查詢的底部,如果我在內部選擇以下語句僅過濾返回的數據,其中有: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