2016-10-14 9 views
6

मैं इस प्रश्न पर फंस गया हूं। क्या कोई मदद कर सकता है?एकाधिक स्थितियों के साथ SQL क्वेरी

एक प्रश्न लिखें 2015 (TIV_2012) 2 दशमलव स्थानों के toa पैमाने में सभी कुल निवेश मानों का योग मुद्रित करने के लिए, सभी पॉलिसीधारकों जो निम्नलिखित मानदंडों को पूरा करने के लिए:

1) एक के रूप में एक ही TIV_2011 मूल्य है या अधिक अन्य पॉलिसीधारकों।

2) एक और पॉलिसी धारक के रूप में ही शहर (यानी (अक्षांश, देशांतर) में स्थित नहीं कर रहे हैं विशेषता जोड़ी अद्वितीय होना चाहिए,

इनपुट प्रारूप इस islike, टेबल

बीमा तालिका है इस प्रकार के रूप में वर्णित:

स्तंभ नाम टाइप पीआईडी ​​पूर्णांक TIV_2011 NUMERIC TIV_2012 NUMERIC LAT NUMERIC LON NUMERIC

जहां पीआईडी ​​पॉलिसीधारक की नीति आईडी है, TIV_2011 2011 में कुल निवेश है, TIV_2012 2012 में कुल निवेश है, एलएटी पॉलिसीधारक के शहर का अक्षांश है और एलओएन पॉलिसीधारक के शहर का देशांतर है।

उदाहरण के लिए यदि thhe डेटा पीआईडी, TIV_2011, TIV_2012, अक्षां, देशांतर

  1. 1, 300, 400.5, 60, 70

  2. 2, 300, 500.7, 70, 80 है

  3. 3, 400, 400, 60, 90

  4. 4, 500, 600, 80, 80

  5. 012,
  6. 5, 400, 300.1, 6, 6

जवाब 1601.30 होगा। के (300.1, 400, 500.7, 400.5)

तो बीमा राशि, जहाँ तक मुझे इस

चयन योग (TIV_2012) बीमा से कहां नहीं अद्वितीय (बीमा से TIV_2011 चयन) के साथ आए हैं;

यह काम नहीं करता है, मुझे एक त्रुटि मिल रही है। कोई मदद करता है।

+1

यह सवाल थोड़ा अस्पष्ट है। क्या आप कुछ नमूना डेटा और अपेक्षित आउटपुट शामिल कर सकते हैं? –

+0

मैंने – sqlnoob

उत्तर

9
SELECT SUM(t1.TIV_2012) 
FROM Insurance t1 
INNER JOIN 
(
    SELECT TIV_2011 
    FROM Insurance 
    GROUP BY TIV_2011 
    HAVING COUNT(*) > 1 
) t2 
    ON t1.TIV_2011 = t2.TIV_2011 
INNER JOIN 
(
    SELECT lat, lon 
    FROM Insurance 
    GROUP BY lat, lon 
    HAVING COUNT(*) = 1 
) t3 
    ON t1.lat = t3.lat AND 
     t1.lon = t3.lon 
+0

से ऊपर एक उदाहरण जोड़ा है, आपको बहुत धन्यवाद 1 – sqlnoob

+2

प्रश्न कहता है कि 'एक ही शहर में अन्य पॉलिसीधारक के रूप में स्थित नहीं है' - मुझे आश्चर्य है कि SQL क्वेरी में टी 1.lat = t3.lat और क्यों है t1.lon = t3.lon'? – jeffreyveon

+0

@jeffreyveon दूसरी आंतरिक उपस्थिति क्वेरी हमें इस शर्त का उपयोग करके परिणाम देती है (* एक ही शहर में अन्य पॉलिसी धारक के रूप में स्थित नहीं है *) जिसका आपने उल्लेख किया है लेकिन 't1.lat = t3.lat और t1.lon = t3 पर। लॉन' का उपयोग बाकी डेटा के साथ जुड़ने के लिए कॉलम निर्दिष्ट करने के लिए किया जाता है। – CrakC

0

मेरा मानना ​​है कि क्वेरी आप लिखने की ज़रूरत दो भीतरी मिलती है और इस प्रकार है:

SELECT SUM(ins1.column_of_interest) as value_needed 
FROM Insurance ins1 
INNER JOIN Insurance ins2 ON (ins1.id = ins2.id AND <<conditions to get same TIV_2011 applied to ins2 >>) 
INNER JOIN Insurance ins3 ON (ins1.id = ins3.id AND << conditions to get unique latitude, longitude on ins3 >>) 
WHERE << other conditions you may apply to ins1 >> 
0
Round(x,2) -> to scale to 2 decimal digits 
inner join 1 -> for condition 1 (finds all the repeating TIV_2011) 
inner join 2 -> for condition 2 (finds LAT, LON that are distinct as a pair) 

Select ROUND(SUM(i1.TIV_2012),2) 
from Insurance i1 
inner join 
    (Select TIV_2011 
    from Insurance 
    group by TIV_2011 
    having count(*) > 1) i2 
on 
    i1.TIV_2011 = i2.TIV_2011 
inner join 
    (Select LAT, LON 
    from Insurance 
    group by LAT, LON 
    having count(*) = 1) i3 
on 
    i1.LAT = i3.LAT 
and 
    i1.LON = i3.LON 
0
SELECT CAST(SUM(t1.TIV_2012) as DECIMAL(11,2)) 
FROM Insurance t1 
INNER JOIN (
    SELECT TIV_2011 
    FROM Insurance 
    GROUP BY TIV_2011 HAVING COUNT(*) > 1) t2 ON t1.TIV_2011 = t2.TIV_2011 
INNER JOIN ( 
    SELECT lat, lon 
    FROM Insurance 
    GROUP BY lat, lon HAVING COUNT(*) = 1) t3 ON t1.lat = t3.lat AND t1.lon = t3.lon 
संबंधित मुद्दे