SQL الانضمام إلى علاقة واحدة إلى كثير
-
19-09-2019 - |
سؤال
حسنا، كان هنا سؤالي الأصلي؛
الجدول واحد يحتوي على
ID|Name
1 Mary
2 John
الجدول اثنين يحتوي على
ID|Color
1 Red
1 Blue
2 Blue
2 Green
2 Black
أريد أن ينتهي مع هو
ID|Name|Red|Blue|Green|Black
1 Mary Y Y
2 John Y Y Y
يبدو أنه نظرا لوجود 11 قيما فريدة من نوعها للون و 1000 على 1000 من السجلات في الجدول، لا توجد طريقة "جيدة" للقيام بذلك. لذلك، سؤالان آخران.
هل هناك طريقة فعالة للاستعلام للحصول على هذه النتيجة؟ يمكنني بعد ذلك إنشاء كروسستابا في طلبي للحصول على النتيجة المرجوة.
ID|Name|Color
1 Mary Red
1 Mary Blue
2 John Blue
2 John Green
2 John Black
إذا كنت أرغب في الحد من عدد السجلات التي تم إرجاعها كيف يمكنني إجراء استعلام للقيام بشيء مثل هذا؟
Where ((color='blue') AND (color<>'red' OR color<>'green'))
لذلك باستخدام المثال أعلاه سأعود بعد ذلك
ID|Name|Color
1 Mary Blue
2 John Blue
2 John Black
أقوم بالاتصال بجداول Visual FoxPro عبر ADODB لاستخدام SQL. شكرا!
المحلول
من سؤالك المسبق، والاستعلام عن جدول VFP، يمكنك الحصول على نتائجك من خلال الاستعلام المؤهل VFP التالي ... Cross-Tab Complete
select
N.ID,
N.Name,
MAX( IIF( C.Color = "Red", "Y", " " )) Red,
MAX( IIF( C.Color = "Blue", "Y", " " )) Blue,
MAX( IIF( C.Color = "Green", "Y", " " )) Green,
MAX( IIF( C.Color = "Black", "Y", " " )) Black
FROM
C_Names N,
Colors C
WHERE
N.ID = C.ID
GROUP BY
N.ID,
N.Name
ثم، كما لديك "ألوان" أخرى، ما عليك سوى نسخ الحد الأقصى (IIF ()) لهذا اللون المعني ولديك العمود كاسم عمود النتيجة ... اتبع النمط. المشكلة الوحيدة هي إذا كان لديك إذلائي مختلفة من الإملاء بالألوان، فقد تحتاج إلى العلوي (C.Color) = "أحمر" (أو مشابه للألوان الأخرى)
نصائح أخرى
كنت تبحث عن استعلام crosstab. يمكنك محاولة استخدام معالج استعلام Crosstab:
http://msdn.microsoft.com/en-us/library/aa979431٪28VS.71٪29.aspx.