سؤال

حسنا، كان هنا سؤالي الأصلي؛

الجدول واحد يحتوي على

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.

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