ORACLE SQL: مبالغ متعددة تعتمد على CODE في بيان واحد

StackOverflow https://stackoverflow.com/questions/285394

  •  08-07-2019
  •  | 
  •  

سؤال

وأعتقد أن هناك طريقة للقيام بذلك، لكنني لست على دراية أوراكل 10g وكثير من الناس الآخرين. وإليك السيناريو:

وأنا تحويل صفحات حاليا كلاسيكي ASP إلى ASP.net 2.0. لدي استعلام يتم إنشاء تقرير. انها المبيعات مقابل مبيعات السابقة التقارير. ما يحدث حاليا هو الاستعلام واحد هو الخروج إلى قاعدة البيانات والاستيلاء على قائمة كاملة من المواقع التي تبيع منتجاتنا. ثم، فإنه حلقات عبر كل صف واحد من المواقع، وتدير بعض العمليات التلخيص في SQL.

وويخرج إلى عدد قليل من الجداول الأخرى، يلخص كميات المبيعات، ثم يضيف المبلغ إلى صف الجدول، الخ منذ الاستعلام مواقع بإرجاع الكثير من النتائج، الاستعلام يأخذ جيدة في الدقيقة 2-3.

وسؤالي هو: كيف يمكنني دمج كل هذه في استعلام واحد.

وLOCATIONS QUERY:

SELECT DISTINCT t.location, 
  l.city, 
  f.year, 
  f.customer FROM loc t, 
location l, father_table f 
WHERE f.number = t.number(+) 
AND f.code = '0001' 
AND f.c_code = '01' 
AND t.location= l.code(+) 
AND t.code IN ('C', 'S') 
AND t.co_code IN ('G', 'V', 'A', 'D') 
AND t.year = '2008' 
ORDER BY l.city, f.year

والاستعلام مبلغ لكل من الصفوف في الاستعلام أعلاه هو:

SELECT SUM(nvl(t.sale_quantity,0)) sale_quantity 
FROM loc t, father_table f  
WHERE f.number = t.number(+) 
AND f.code = '0001' 
AND f.c_code = '01'
AND f.year = '2008' 
AND t.code = 'C' 
AND t.location = '1566' <----- EACH ROW'S t.location VALUE
AND t.co_code IN ('G', 'V', 'A', 'D') 
GROUP BY t.location, t.code, f.year

وبدلا من تنفيذ الحلقات عبر كل سجل من الاستعلام الأصلي، هل هناك طريقة يمكنني الجمع بين الاستعلامات ولها SUM في الاستعلام الموقع و. والمفتاح هنا هو أن الاستعلام الثاني يحصل فقط SUM المبيعات عندما t.code = 'C' لا 'C' & 'S'

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

المحلول

وأعتقد أن هذا لا ما تريد. إذا لم تكن صحيحة تماما، وأعتقد أن الشيء الرئيسي تحتاج إلى معرفته حول هو تعبير عن حالة. هذا هو وسيلة لتصفية ضمن الدالة SUM.

SELECT t.location, 
  l.city, 
  f.year, 
  f.customer,
  SUM( NVL( CASE WHEN t.code ='C' THEN t.sale_quantity ELSE 0 END, 0)) sale_quantity
FROM loc t, location l, father_table f 
WHERE f.number = t.number(+) 
AND f.code = '0001' 
AND f.c_code = '01' 
AND t.location= l.code(+) 
AND t.code IN ('C', 'S') 
AND t.co_code IN ('G', 'V', 'A', 'D') 
AND t.year = '2008' 
GROUP BY t.location, l.city, f.year
ORDER BY l.city, f.year
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top