سؤال

لقد حصلت على مخطط الجدول التالي في SQL Server 2005 وأرغب في تحويله إلى عرض مفهرس لبعض الاستعلامات التي أكتبها حتى أتمكن من إجراء التغييرات الهيكلية الدائمة.

الجداول كما يلي

Writing
(
DocumentSerial int
Grader1_ID int
Grade_1 int
Grader2_ID int 
Grade_2 int 
Grader3_ID int 
Grade_3 int
)

Users
(userID int,
firstname,
lastname
)

أريد طاولة مع صف واحد لكل مجموعة من الصف/الدرجة/المستند حيث يكون الصف هو إما Grader 1 أو Grader 2 أو Grader 3

يستخدم العرض الذي كتبته Union ، لذلك لا يفهرس:

select documentSerial,grader1_id as grader_id, grade_1 as grade ,1 as sequence
 from Writing w inner join User U on w.grader1_id=u.userid
UNION
select documentSerial,grader2_id as grader_id, grade_2 as grade ,2 as sequence
 from Writing w inner join User U on w.grader2_id=u.userid
UNION
select documentSerial,grade31_id as grader_id, grade_3 as grade ,3 as sequence
 from Writing w inner join User U on w.grader3_id=u.userid

المشكلة هي - SQL لا يمكن فهرسة العرض مع الاتحاد ...

هل كانت مفيدة؟

المحلول

لماذا يجب أن تكون طريقة عرض مفهرسة عندما يمكنك استخدام جدول مناسب:

SELECT x.*
  INTO normalized_table
  FROM (select documentSerial,grader1_id as grader_id, grade_1 as grade ,1 as sequence
          from Writing w 
          join User U on w.grader1_id = u.userid
        UNION ALL
        select documentSerial,grader2_id as grader_id, grade_2 as grade ,2 as sequence
          from Writing w 
          join User U on w.grader2_id = u.userid
        UNION ALL
        select documentSerial,grade31_id as grader_id, grade_3 as grade ,3 as sequence
          from Writing w 
          join User U on w.grader3_id = u.userid) x

أتفهم أنك ربما تريد العرض حتى لا يكون لديك مشاحنات مزامنة البيانات. البديل الآخر الوحيد هو عدم فهرسة العرض ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top