2010-06-16 14 views
6

क्या SQL सर्वर में शामिल होना संभव है जो प्रत्येक पंक्ति में तालिका ए से एन यादृच्छिक पंक्तियों में शामिल होता है? उदाहरण के लिए, कहें कि मेरे पास ग्राहक तालिका, एक उत्पाद तालिका और ऑर्डर तालिका है। मैं प्रत्येक ग्राहक को 5 यादृच्छिक उत्पादों में शामिल करना चाहता हूं और ऑर्डर तालिका में इन पंक्तियों को सम्मिलित करना चाहता हूं। (और प्रत्येक ग्राहक को अपने स्वयं के 5 यादृच्छिक पंक्तियों में शामिल होना चाहिए, मैं नहीं चाहता कि सभी ग्राहक एक ही 5 पंक्तियों में शामिल हों)।एक तालिका में एक पंक्ति में किसी अन्य पंक्ति में एक यादृच्छिक पंक्तियों में शामिल हों

क्या यह संभव है? मैं SQL सर्वर 2005 का उपयोग कर रहा हूं और यह ठीक है अगर समाधान उस के लिए विशिष्ट है।

यह एक अजीब आवश्यकता है लेकिन मैं मूल रूप से कुछ यादृच्छिक डेटा उत्पन्न करने के लिए एक छोटा डेटा जेनरेटर बना रहा हूं।

उत्तर

6

इस

DECLARE @Products TABLE(
     id Int, 
     Prod VARCHAR(10) 
) 

DECLARE @Customer TABLE(
     id INT 
) 

INSERT INTO @Products SELECT 1, 'a' 
INSERT INTO @Products SELECT 2, 'b' 
INSERT INTO @Products SELECT 3, 'c' 
INSERT INTO @Products SELECT 4, 'd' 

INSERT INTO @Customer SELECT 1 
INSERT INTO @Customer SELECT 2 
--use a cross product select, BUT apply a random order number per customer, 
--and only select the 'TOP N' items you require. 
;WITH Vals AS (
     SELECT c.id CustomerID, 
       p.id ProductID, 
       p.Prod, 
       ROW_NUMBER() OVER(PARTITION BY c.ID ORDER BY NEWID()) RowNumber 
     FROM @Customer c, 
       @Products p 
) 
SELECT * 
FROM Vals 
WHERE RowNumber <= 2 
+0

बहुत बढ़िया, कि चाल किया था की तरह कुछ पर एक नज़र डालें :) –

संबंधित मुद्दे

 संबंधित मुद्दे