"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكنني تحويل البيانات بدقة باستخدام سجلات مميزة لتجنب فقدان المعلومات؟

كيف يمكنني تحويل البيانات بدقة باستخدام سجلات مميزة لتجنب فقدان المعلومات؟

تم النشر بتاريخ 2024-12-27
تصفح:333

How Can I Accurately Pivot Data with Distinct Records to Avoid Losing Information?

تحريك السجلات المميزة بشكل فعال

تلعب الاستعلامات المحورية دورًا حاسمًا في تحويل البيانات إلى تنسيق جدولي، مما يتيح تحليل البيانات بسهولة. ومع ذلك، عند التعامل مع سجلات مميزة، قد يصبح السلوك الافتراضي للاستعلامات المحورية مشكلة.

المشكلة: تجاهل القيم المميزة

خذ بعين الاعتبار الجدول التالي:

------------------------------------------------ ------ | رمز الهوية الاسم النسبة الاسم 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