سؤال

أنا جديدة على خدمات SQL Server التقرير ، وكان يتساءل أفضل طريقة للقيام بما يلي:

  • الاستعلام للحصول على قائمة من شعبية معرفات
  • الاستعلام الفرعي على كل بند على خصائص من جدول آخر

من الناحية المثالية ، التقرير النهائي الأعمدة تبدو مثل هذا:

[ID] [property1] [property2] [SELECT COUNT(*)
                              FROM AnotherTable 
                              WHERE ForeignID=ID]

قد تكون هناك طرق لبناء عملاق استعلام SQL أن تفعل كل هذا في آن واحد, ولكن أنا أفضل أن يقسمه.هو النهج الموصى به إلى كتابة VB وظيفة أداء الاستعلام الفرعي لكل الصف ؟ شكرا على أي مساعدة.

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

المحلول

أود أن أوصي باستخدام تقرير فرعي.يمكنك وضع التقرير الفرعي في خلية جدول.

نصائح أخرى

اعتمادا على كيفية كنت تريد إخراج للنظر فرعي يمكن القيام به ، أو يمكن أن المجموعة على الهوية ، property1, property2 و إظهار العناصر من الجدول تفاصيل البنود (على افتراض أنك تريد أن تظهر أكثر من الاعتماد فقط).

شيء مثل

select t1.ID, t1.property1, t1.property2, t2.somecol, t2.someothercol
from table t1 left join anothertable t2 on t1.ID = t2.ID

@كارلتون Jenke أعتقد أنك سوف تجد الخارجي الانضمام إلى أفضل أداء من يرتبط فرعي في المثال الذي أعطيته.تذكر أن الاستعلام الفرعي يحتاج إلى تشغيل لكل صف.

أبسط طريقة هي هذه:

select *,
 (select count(*) from tbl2 t2 where t2.tbl1ID = t1.tbl1ID) as cnt
from tbl1 t1

هنا هو صيغة عملية (باستخدام متغيرات الجدول):

declare @tbl1 table
(
 tbl1ID int,
 prop1 varchar(1),
 prop2 varchar(2)
)

declare @tbl2 table
(
 tbl2ID int,
 tbl1ID int
)

select *,
 (select count(*) from @tbl2 t2 where t2.tbl1ID = t1.tbl1ID) as cnt
from @tbl1 t1

ومن الواضح أن هذا هو مجرد الخام على سبيل المثال - معيار تطبيق القواعد مثل لا select *, الخ ...


التحديث من أغسطس 21 '08 في 21:27:
@AlexCuse - نعم, أتفق تماما على الأداء.

بدأت الكتابة مع الخارجي الانضمام ، ولكن بعد ذلك رأيت في إخراج نموذج العد و ظننت أن هذا هو ما يريد ، العد لن يعود بشكل صحيح إذا كانت الجداول الخارجي انضم.ناهيك عن أن ينضم يمكن أن يسبب السجلات الخاصة بك أن تكون مضروبة (1 دخول من tbl1 أن مباريات 2 الإدخالات في tbl2 = إرجاع 2) التي يمكن أن تكون غير مقصودة.

لذا أعتقد أنه حقا يتلخص في تفاصيل بشأن ما الاستعلام الخاص بك يحتاج إلى العودة.


التحديث من أغسطس 21 '08 الساعة 22:07:
للإجابة على أجزاء أخرى من السؤال - هو VB وظيفة الطريقة ؟ لا.قطعا لا.لا لشيء هذا بسيط.

وظائف سيئة جدا على أداء كل صف في عودة مجموعة ينفذ وظيفة.

إذا كنت ترغب في "تجزئة" أجزاء مختلفة من الاستعلام عليك أن تقترب أكثر مثل إجراء مخزن.بناء temp المائدة ، جزء من الاستعلام إدراج النتائج في الجدول ، ثم تفعل أي استفسارات أخرى تحتاج التحديث الأصلي temp الجدول (أو أدخل إلى أكثر temp الجداول).

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