SQL: إنشاء عداد لإدخالات مكررة

أرغب في إنشاء عداد عدد صحيح لإدخالات مكررة على جدول وسيط في خطوة الاستيراد. لنفترض أن لدي جدولًا باسم FinalTable ، يبدو كالتالي:

<�كود> FinalTable </القانون>

ID       Date          SameDateCounter
1003     2012/01/01    NULL
1004     2012/02/01    NULL
1005     2012/03/01    1
1006     2012/03/01    2
1007     2012/03/01    3
1008     2012/04/01    1
1009     2012/04/01    2

And has a unique constraint on (Date, SameDateCounter). In the intermediate step the data is in IntermediateTable, which looks exactly like <�كود> FinalTable </القانون> except that it doesn't have any constraints. So the starting point for this problem is here:.

IntermediateTable:

ID       Date          SameDateCounter
1003     2012/01/01    NULL
1004     2012/02/01    NULL
1005     2012/03/01    NULL
1006     2012/03/01    NULL
1007     2012/03/01    NULL
1008     2012/04/01    NULL
1009     2012/04/01    NULL

وأحتاج إلى إنشاء قيم لـ SameDateCounter ، بدءًا من واحد ، حيث يظهر التاريخ أكثر من مرة.

0
النتيجة المتوقعة = كما هو موضح في FinalTable
وأضاف المؤلف Karl, مصدر
يمكنك تجربة الترتيب والتقسيم كما هو موضح في هذا [المقالة] ( weblogs.sqlteam.com/jeffs/archive/2007/03/28/60146.aspx )
وأضاف المؤلف jocelyn, مصدر
نتيجة متوقعة؟
وأضاف المؤلف manurajhada, مصدر

1 إجابة

يمكنك استخدام ROW_NUMBER() وظيفة مشتركة مع PARTITION BY جملة:

;WITH Data AS
(  
   SELECT
       ID, Date,
       SameDateCounter = ROW_NUMBER() OVER (PARTITION BY Date ORDER BY ID DESC)
   FROM dbo.YourTableNameHere
)
SELECT *
FROM Data

تقوم جملة PARTITION BY Date بتجميع كل قيمة منفصلة التاريخ في "القسم" الخاص بها ، و ROW_NUMBER() يوزع الأرقام بدءًا من 1 ، لكل قسم.

لذلك ، سيبدأ SameDayCounter الخاص بك في 1 لكل يوم جديد وسيعرض الصفوف لهذا اليوم بعينه.

0
وأضاف
نعم هذا كان فكرتي ولكن لم يحن الوقت لكتابة ذلك :)
وأضاف المؤلف jocelyn, مصدر