سؤال

لقد أعطيت مدرب بلدي لي واجب أنني لست متأكدا من الممكن منذ بعد حوالي أسبوعين، وأنا لا يمكن معرفة الحل، لذلك أنا رمي هذا الخروج لطلب أي نوع من المساعدة من SO مجموعة. إذا كانت هذه يكسر دماغك، أعتذر.

وقليلا الخلفية أولا: نحن في تطوير تطبيق قاعدة بيانات الاستعلام التي تسمح للمستخدمين لنعود أي شيء يريدونه من قاعدة البيانات دون الحاجة إلى معرفة أي SQL.

ومشكلتي: نريد لتخصيص الطريقة التي يتم بها استخدام "متميزة" الاختيار. بدلا من وجود الكلمة متميزة تنطبق على الصفوف المحددة، ونحن نريد أن ينطبق على بعض الحقول فقط، بحيث الصفوف الأولى التي تطابق الحقول سوف تعتاد. للحصول على مثال:

وبوب جونز، 122 الشارع الرئيسي، بورتلاند، OR
سو جونز، 122 الشارع الرئيسي، بورتلاند، OR
ماري سميث، 458 شارع 32، بورتلاند، OR
رالف سميث، 458 شارع 32، بورتلاند، OR

ونحن نريد هذا العمل بحيث لا الصفوف الأولى لكل عنوان يتم إرجاع كما يلي:

وبوب جونز، 122 الشارع الرئيسي، بورتلاند، OR
ماري سميث، 458 شارع 32، بورتلاند، OR

ومع متميزة وضعها الطبيعي، أن تعاد كافة الصفوف الأربعة، التي هي أكثر من نريد. هل لديها أي أفكار عن كيفية يمكننا أن نذهب عن القيام بذلك؟ شكرا.

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

المحلول

WITH NumberedRows AS (
   SELECT FirstName, LastName, Address,
          ROW_NUMBER() OVER (PARTITION BY Address ORDER BY Id) as RowNumber
   FROM Table
) SELECT FirstName, LastName, Address
  FROM NumberedRows
  WHERE RowNumber = 1;

ويحدد PARTITION BY Address قائمة العمود الذي تريد مجموعة من ويشير ORDER BY ID قائمة العمود الذي يحدد البند "أولا" مع.

و(تأكد من إنهاء العبارة السابقة بفاصلة منقوطة.)

نصائح أخرى

لديك لتشغيل العادية "SELECT DISTINCT" عبارة SQL التي الاستفسارات فقط للحقول في الواقع لا يحتاج إلى أن يكون متميزا. ثم مرة واحدة تحصل تلك العودة، تشغيل استعلام آخر أن يأخذ السجل الذي تمت مطابقة البيانات للحصول على حقول غير مميزة TOP 1. في هذه اللحظة وأنا لا أرى وسيلة للقيام بذلك في بيان SQL واحد ...

وSELECT MIN (a.firstname + a.lastname)، وعنوان من العاشر المجموعة حسب العنوان.

وهذا هو الجواب مفرطة في التبسيط، لكنه يحصل تزوجنا وجهة نظرك. فإنه سيعود فقط اسم "أقل" لكل عنوان واضح.

وستحتاج إلى استخدام سلسلة المجال للقيام بهذه الفروق كذلك، لكنها ستعطي لك ما تحتاج إليه.

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