मेरे पास SQL ​​​​में एक टेबल है जिसमें 3 कॉलम हैं:

  • श्रेणी नाम
  • चेतावनी अंतराल
  • त्रुटि अंतराल

और फिर मेरे पास एक और टेबल है जिसमें 4 कॉलम हैं:

  • श्रेणी नाम
  • समूह नाम
  • शामिल अपवर्जित
  • मिलान

इस तालिका की प्रत्येक पंक्ति में श्रेणीनाम, समूहनाम और शामिल बहिष्कृत के आधार पर 2 अद्वितीय रिकॉर्ड हैं। उदाहरण के लिए, जेसन के रूप में यह इस तरह दिखता है:

{
    categoryName: 'Folders',
    groupName: 'Products',
    includeExcluded: 'E',
    match: 'SomeProduct'
}, {
    categoryName: 'Folders',
    groupName: 'Products',
    includeExcluded: 'I',
    match: 'SomeOtherProduct'
}

3 समूह (उत्पाद, प्रतिनिधि और व्यावसायिक श्रेणियां) हैं, इसलिए प्रत्येक श्रेणी में इस तालिका में डेटा की केवल 6 पंक्तियाँ हैं। मैं एक एसक्यूएल स्टेटमेंट जेनरेट करना चाहता हूं जो टेबल को कॉलम में खींचता है जिसे मैं इस तरह एक जेसन ऑब्जेक्ट में पार्स कर सकता हूं:

{
    categoryName: 'Folders',
    warnInterval: 40,
    errorInterval: 60,
    groups: [{
        groupName: 'Products',
        Include: 'SomeProduct',
        Exclude: 'SomeOtherProduct' 
    }, {
        groupName: 'Reps',
        Include: 'SomeRep',
        Exclude: 'SomeOtherRep' 
    }, {
        groupName: 'BusinessCategories',
        Include: 'SomeCategory',
        Exclude: 'SomeOtherCategory' 
    }]
}

मैं चाहता हूं कि SQL कथन 2 तालिकाओं में शामिल हो और डेटा को इस तरह कॉलम में प्रस्तुत करे:

  • श्रेणी नाम
  • चेतावनी अंतराल
  • त्रुटि अंतराल
  • ProductTitle (यह समूह का नाम है)
  • ProductIncludes (यदि शामिल किया गया मान 'I' है तो इस कॉलम में मैच डालें)
  • ProductExcludes (यदि शामिल बहिष्कृत मान 'E' है तो इस कॉलम में मिलान डालें)
  • प्रतिनिधिशीर्षक
  • प्रतिनिधि शामिल हैं
  • प्रतिनिधिबहिष्कृत
  • व्यवसाय श्रेणी शीर्षक
  • व्यापार श्रेणी में शामिल हैं
  • व्यवसाय श्रेणी बहिष्कृत

मुझे वाकई उम्मीद है कि मैंने इसे अच्छी तरह समझाया। क्या कोई इसके लिए एसक्यूएल के साथ मेरी मदद कर सकता है? पीएस, यह ओरेकल है :)

0
r3plica 3 अक्टूबर 2017, 18:11
क्या आप अपनी टेबल निर्माण स्क्रिप्ट साझा कर सकते हैं ताकि मैं कुछ उदाहरण डेटा बना सकूं?
 – 
Christian Palmer
3 अक्टूबर 2017, 18:25

1 उत्तर

सबसे बढ़िया उत्तर

शायद आप यही चाहते हैं। क्वेरी वास्तव में श्रेणी_मैच तालिका को छह डेटासेट के एक सेट में तोड़ती है - तीन समूह * दो में शामिल / बहिष्कृत झंडे।

आपके प्रश्न में कॉलम की सूची में "ProductTitle (यह समूह का नाम है)" शामिल है, जिसका कोई मतलब नहीं है क्योंकि प्रत्येक समूह डेटा की प्रत्येक पंक्ति में दर्शाया गया है। पर शायद मैं गलत समझ गया हूँ

WITH
 category_intervals (category_name, warn_interval, error_interval) AS 
 (SELECT 'Folders',40,60 FROM dual UNION ALL
  SELECT 'catA',10,20 FROM dual UNION ALL
  SELECT 'catB',50,100 FROM dual 
 )
,category_matches(category_name, group_name, include_exclude, match_name) AS
 (SELECT 'Folders','Products','E','Product 1' FROM dual UNION ALL
  SELECT 'Folders','Products','I','Product 2' FROM dual UNION ALL 
  SELECT 'Folders','Reps','E','Rep 1' FROM dual UNION ALL
  SELECT 'Folders','Reps','I','Rep 2' FROM dual UNION ALL 
  SELECT 'Folders','Business Categories','E','Category 1' FROM dual UNION ALL
  SELECT 'Folders','Business Categories','I','Category 2' FROM dual UNION ALL 
  --
  SELECT 'catA','Products','E','Product 3' FROM dual UNION ALL
  SELECT 'catA','Products','I','Product 4' FROM dual UNION ALL 
  SELECT 'catA','Reps','E','Rep 3' FROM dual UNION ALL
  SELECT 'catA','Reps','I','Rep 4' FROM dual UNION ALL 
  SELECT 'catA','Business Categories','E','Category 3' FROM dual UNION ALL
  SELECT 'catA','Business Categories','I','Category 4' FROM dual UNION ALL 
  --
  SELECT 'catB','Products','E','Product 5' FROM dual UNION ALL
  SELECT 'catB','Products','I','Product 6' FROM dual UNION ALL 
  SELECT 'catB','Reps','E','Rep 5' FROM dual UNION ALL
  SELECT 'catB','Reps','I','Rep 6' FROM dual UNION ALL 
  SELECT 'catB','Business Categories','E','Category 5' FROM dual UNION ALL
  SELECT 'catB','Business Categories','I','Category 6' FROM dual 
 )
SELECT
 ci.category_name
,ci.warn_interval
,ci.error_interval
,ip.match_name           product_include
,ep.match_name           product_exclude
,ir.match_name           rep_include
,er.match_name           rep_exclude
,ibc.match_name          bus_cat_include
,ibc.match_name          bus_catt_exclude
FROM
 category_intervals   ci
,(SELECT *
  FROM category_matches  
  WHERE group_name = 'Products'
  AND include_exclude = 'I'
 ) ip 
,(SELECT *
  FROM category_matches  
  WHERE group_name = 'Products'
  AND include_exclude = 'E'
 ) ep 
,(SELECT *
  FROM category_matches  
  WHERE group_name = 'Reps'
  AND include_exclude = 'I'
 ) ir 
,(SELECT *
  FROM category_matches  
  WHERE group_name = 'Reps'
  AND include_exclude = 'E'
 ) er
,(SELECT *
  FROM category_matches  
  WHERE group_name = 'Business Categories'
  AND include_exclude = 'I'
 ) ibc 
,(SELECT *
  FROM category_matches  
  WHERE group_name = 'Business Categories'
  AND include_exclude = 'E'
 ) ebc 
WHERE 1=1
AND ci.category_name = ip.category_name
AND ci.category_name = ep.category_name
AND ci.category_name = ir.category_name
AND ci.category_name = er.category_name
AND ci.category_name = ibc.category_name
AND ci.category_name = ebc.category_name
ORDER BY
 ci.category_name
;
0
Christian Palmer 3 अक्टूबर 2017, 18:50