यदि आप वास्तव में व्यक्तिगत पंक्तियों का एक यादृच्छिक नमूना चाहते हैं, तो TABLESAMPLE का उपयोग करने के बजाय, पंक्तियों को यादृच्छिक रूप से फ़िल्टर करने के लिए अपनी क्वेरी को संशोधित करें। उदाहरण के लिए, निम्न क्वेरी बिक्री के लगभग एक प्रतिशत पंक्तियों को वापस करने के लिए NEWID फ़ंक्शन का उपयोग करती है। SalesOrderDetail Table:
SELECT * FROM Sales.SalesOrderDetail
WHERE 0.01 >= CAST(CHECKSUM(NEWID(), SalesOrderID) & 0x7fffffff AS float)
/ CAST (0x7fffffff AS int)
SalesOrderID कॉलम CHECKSUM अभिव्यक्ति में शामिल है ताकि NEWID () प्रति पंक्ति के आधार पर नमूना प्राप्त करने के लिए प्रति पंक्ति एक बार मूल्यांकन करे। अभिव्यक्ति CAST (CHECKSUM (NEWID), SalesOrderID) और 0x7fffffff AS फ्लोट / CAST (0x7fffffff AS int) 0 और 1. के बीच एक यादृच्छिक फ्लोट मान का मूल्यांकन करता है।
स्रोत: http://technet.microsoft.com/en-us/library/ms189108(v=sql.105s.nx
इसे और नीचे समझाया गया है:
यह कैसे काम करता है? आइए WHERE क्लॉज को विभाजित करें और इसे समझाएं।
चेक फ़ंक्शन सूची में आइटम पर एक चेकसम की गणना कर रहा है। यह तर्कपूर्ण है कि क्या SalesOrderID की भी आवश्यकता है, क्योंकि NEWID () एक ऐसा फ़ंक्शन है जो एक नया यादृच्छिक GUID लौटाता है, इसलिए किसी यादृच्छिक रैंडम को एक स्थिर से गुणा करने पर किसी भी मामले में यादृच्छिक परिणाम प्राप्त होना चाहिए। वास्तव में, SalesOrderID को छोड़कर कोई फर्क नहीं पड़ता है। यदि आप एक उत्सुक सांख्यिकीविद् हैं और इसे शामिल करने का औचित्य साबित कर सकते हैं, तो कृपया नीचे टिप्पणी अनुभाग का उपयोग करें और मुझे बताएं कि मैं गलत क्यों हूं!
चेक फ़ंक्शन एक वार्बिनरी देता है। द्विआधारी और 0x7fffffff के साथ संचालन करना, जो कि बाइनरी में (111111111 ...) के बराबर है, एक दशमलव मान प्राप्त करता है जो प्रभावी रूप से 0 और 1s के यादृच्छिक स्ट्रिंग का प्रतिनिधित्व करता है। सह-कुशल 0x7fffffff द्वारा विभाजित करना प्रभावी रूप से इस दशमलव आकृति को 0 और 1. के बीच के आंकड़े तक सामान्य कर देता है, फिर यह तय करने के लिए कि क्या प्रत्येक पंक्ति अंतिम परिणाम सेट में शामिल करने का गुण है, 1 / x की सीमा का उपयोग किया जाता है (इस मामले में, 0.01) जहां x नमूने के रूप में पुनर्प्राप्त करने के लिए डेटा का प्रतिशत है।
स्रोत: https://www.mssqltips.com/sqlservertip/3157/different-ways-to-get-random-data-for-sql-server-data-sampling