2012-03-05 49 views
0

我希望在使用連接時獲得清晰的密級函數的行爲。我在這裏早些時候得到了一個很好的解決方案SQL Server recursive cte help wanted查看解決方案,其中涉及使用稠密排名和內部聯接來在缺失數據點處對數據進行分區。SQL Server密集等級/內連接概念澄清?

因此:根據我如何閱讀解決方案,在內部聯接時,密集排名在左側排名行中包含,但不包含在右側。我對此做了一個小測試,我不能再現這種行爲。例如,當我運行查詢並在cte上使用基本select語句時,由於它在原始查詢中而沒有再分區,並且數據點爲1/5/12,A丟失,所以我得到:

TradeDate  Symbol Clse DenseRank RowNumber 
2012-01-03 A  36.48 1  1 
2012-01-04 A  36.19 2  2 
2012-01-06 A  37.40 4  3 

基於我目前的理解,上面的密集等級值在最後兩條記錄中只會從2到3,因爲連接不返回tblDailyPricingAndVol中日期的匹配。提前致謝。

+0

從你之前的例子中,'tblTradingDays'與'tblDailyPricingAndVol'有一對多的關係。 'tblDailyPricingAndVol'中的所有日期都存在於'tblTradingDays'中。 因此,上例中的連接不會消除任何記錄 – 2012-03-05 06:33:54

+0

我認爲您誤解了其他查詢的工作原理。在連接中不使用'dense_rank'值。它用在分區子句'(r-r1)'中爲連續日期創建一個組。 – 2012-03-05 13:51:27

回答

0

DENSE_RANK將排名結果的加入。由於Table2中沒有2012-01-02,因此結果爲兩行,DENSE_RANK將給出排名值12

+0

謝謝......目前我沒有看到的是,在我提供鏈接的示例中,似乎缺少的日期值是以排名計算的,如果您不顯示cte結果而再次分區。我會更新我的帖子.. – StatsViaCsh 2012-03-05 13:38:20