تحريك السجلات المميزة بشكل فعال
تلعب الاستعلامات المحورية دورًا حاسمًا في تحويل البيانات إلى تنسيق جدولي، مما يتيح تحليل البيانات بسهولة. ومع ذلك، عند التعامل مع سجلات مميزة، قد يصبح السلوك الافتراضي للاستعلامات المحورية مشكلة.المشكلة: تجاهل القيم المميزة
خذ بعين الاعتبار الجدول التالي:
------------------------------------------------ ------ | رمز الهوية الاسم النسبة الاسم 1 النشاط | -------------------------------------------------- --- | 1 براشانت 43.43 جيمس جيمس _ الجري | | 1 براشانت 70.43 سام سام _ الطبخ | | 1 براشانت 90.34 ليزا ليزا _ المشي | | 1 براشانت 0.00 جيمس جيمس _ السرقة | | 1 براشانت 0.00 جيمس جيمس _ الافتقار | | 1 براشانت 73 سام سام _ الطبخ 1 | -------------------------------------------------- ----
------------------------------------------------------ | Id Code percentage name name1 activity | ----------------------------------------------------- | 1 Prashant 43.43 James James_ Running | | 1 Prashant 70.43 Sam Sam_ Cooking | | 1 Prashant 90.34 Lisa Lisa_ Walking | | 1 Prashant 0.00 James James_ Stealing | | 1 Prashant 0.00 James James_ Lacking | | 1 Prashant 73 Sam Sam_ Cooking 1 | ------------------------------------------------------
معرف التحديد،الرمز، الحد الأقصى (الحالة عندما يكون الاسم = "جيمس" ثم ينتهي النشاط) AS جيمس، MAX(الحالة عندما name1 = 'James_' ثم النسبة المئوية END) AS James_، الحد الأقصى (الحالة عندما يكون الاسم = "Sam" ثم ينتهي النشاط) AS Sam، MAX(الحالة عندما name1 = 'Sam_' ثم النسبة المئوية END) AS Sam_، الحد الأقصى (الحالة عندما يكون الاسم = "ليزا" ثم ينتهي النشاط) AS ليزا، الحد الأقصى (الحالة عند الاسم 1 = "Lisa_" ثم النسبة المئوية END) AS Lisa_ من أ GROUP BY Id، Code
SELECT Id,Code, MAX(CASE WHEN name = 'James' THEN activity END) AS James, MAX(CASE WHEN name1 = 'James_' THEN percentage END) AS James_, MAX(CASE WHEN name = 'Sam' THEN activity END) AS Sam, MAX(CASE WHEN name1 = 'Sam_' THEN percentage END) AS Sam_, MAX(CASE WHEN name = 'Lisa' THEN activity END) AS Lisa, MAX(CASE WHEN name1 = 'Lisa_' THEN percentage END) AS Lisa_ FROM A GROUP BY Id, Code
-------------------------- ----------------------------------------- رمز الهوية جيمس جيمس_ سام سام_ ليزا ليزا_ -------------------------------------------------- ----------------- 1 براشانت الجري 43.43 الطبخ 3.43 المشي 90.34 1 براشانت سرقة 0.0 NULL NULL NULL NULL -------------------------------------------------- -----------------
------------------------------------------------------------------- Id Code James James_ Sam Sam_ Lisa Lisa_ ------------------------------------------------------------------- 1 Prashant Running 43.43 Cooking 3.43 Walking 90.34 1 Prashant Stealing 0.0 NULL NULL NULL NULL -------------------------------------------------------------------الحل: استخدام ROW_NUMBER() للدقة
لمعالجة هذا، يمكننا تقديم ROW_NUMBER():
;مع cte as ( حدد *، ROW_NUMBER() على (التقسيم حسب ترتيب الاسم حسب النسبة المئوية التنازلية) ROWNUM من أ ) ...
;with cte as ( select *, ROW_NUMBER() over (partition by name order by percentage desc) ROWNUM from A ) ...
الجدول الناتج سيكون:
-------------- -------------------------------------------- | رمز الهوية جيمس جيمس_ سام سام_ ليزا ليزا_ -------------------------------------------------- -------- | 1 براشانت الجري 43.43 الطبخ 1 73 المشي 90.34 | 1 براشانت سرقة 0.00 الطبخ 3.43 NULL NULL | 1 براشانت يفتقر إلى 0.00 NULL NULL NULL NULL -------------------------------------------------- --------
---------------------------------------------------------- | Id Code James James_ Sam Sam_ Lisa Lisa_ ---------------------------------------------------------- | 1 Prashant Running 43.43 Cooking 1 73 Walking 90.34 | 1 Prashant Stealing 0.00 Cooking 3.43 NULL NULL | 1 Prashant Lacking 0.00 NULL NULL NULL NULL ----------------------------------------------------------
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3