2009-12-22 10 views
5

पर एक समग्र फ़ंक्शन निष्पादित नहीं कर सकता है क्या कोई इस क्वेरी के साथ मेरी सहायता कर सकता है?एक सबक्वायरी

SELECT p.OwnerName, SUM(ru.MonthlyRent) AS PotentinalRent, SUM(
    (SELECT COUNT(t.ID) * ru.MonthlyRent FROM tblTenant t 
     WHERE t.UnitID = ru.ID) 
    ) AS ExpectedRent 
FROM tblRentalUnit ru 
LEFT JOIN tblProperty p ON p.ID = ru.PropertyID 
GROUP BY p.OwnerName 

मुझे दूसरी राशि के साथ समस्याएं आ रही हैं, यह मुझे ऐसा करने नहीं देगी। जाहिर है कि एसयूएम सबक्वायरीज़ पर काम नहीं करेगा, लेकिन मुझे अपेक्षित किराए की गणना करने की आवश्यकता है (मासिक किराया यदि किराए पर लेने वाले के आईडी को सौंपा गया किरायेदार है, तो 0 वे नहीं हैं)। मै इसे काम मे कैसे ले सकता हूँ?

+0

मैं भी सुनिश्चित करने के लिए एक खोज चला ... कोई तीसरा योग :-) – KLE

+0

दूसरा नहीं है! माफ़ कीजिये! मेरी गलती। – Malfist

+0

यूनिट के मासिक किराया समय के उस इकाई में किरायेदारों की संख्या के उत्पाद का क्या अर्थ है? आप यूनिट में प्रत्येक किरायेदार से पूरा किराया एकत्र नहीं करेंगे? –

उत्तर

6
SELECT p.OwnerName, SUM(ru.MonthlyRent) AS PotentialRent, SUM(cnt) AS ExpectedRent 
FROM tblRentalUnit ru 
LEFT JOIN 
     tblProperty p 
ON  p.ID = ru.PropertyID 
OUTER APPLY 
     (
     SELECT COUNT(t.id) * ru.MonthlyRent AS cnt 
     FROM tblTenant t 
     WHERE t.UnitID = ru.ID 
     ) td 
GROUP BY p.OwnerName 

यहाँ एक परीक्षण स्क्रिप्ट लगाया जाए:

WITH tblRentalUnit AS 
     (
     SELECT 1 AS id, 100 AS MonthlyRent, 1 AS PropertyID 
     UNION ALL 
     SELECT 2 AS id, 300 AS MonthlyRent, 2 AS PropertyID 
     ), 
     tblProperty AS 
     (
     SELECT 1 AS id, 'Owner 1' AS OwnerName 
     UNION ALL 
     SELECT 2 AS id, 'Owner 2' AS OwnerName 
     ), 
     tblTenant AS 
     (
     SELECT 1 AS id, 1 AS UnitID 
     UNION ALL 
     SELECT 2 AS id, 1 AS UnitID 
     ) 
SELECT p.OwnerName, SUM(ru.MonthlyRent) AS PotentialRent, SUM(cnt) AS ExpectedRent 
FROM tblRentalUnit ru 
LEFT JOIN 
     tblProperty p 
ON  p.ID = ru.PropertyID 
OUTER APPLY 
     (
     SELECT COUNT(t.id) * ru.MonthlyRent AS cnt 
     FROM tblTenant t 
     WHERE t.UnitID = ru.ID 
     ) td 
GROUP BY p.OwnerName 
+0

बाहरी लागू करने का मतलब क्या है? – Malfist

+0

ru.MontlyRent का उपयोग नहीं किया जा सकता है। – Malfist

+0

यह एक बाहरी जुड़ने की तरह है, इस अंतर के साथ कि यह एक सबक्वायरी के बजाय आंतरिक क्वेरी का उपयोग करता है। –

0

unitMonthlyRent बार की राशि किरायेदारों की संख्या के अर्थ कुछ partiicular किराए पर लेने की इकाई (COUNT(t.ID) * ru.MonthlyRent) के लिए, क्या है?

यह (से केवल इकाइयों occcupied) मामले तुम सब करने की कोशिश कर रहे हैं की तुलना में उम्मीद किराया सभी untis से कुल संभावित किराया के बीच अंतर देखना है कि है? यदि हां, तो फिर कोशिश इस

Select p.OwnerName, 
    Sum(r.MonthlyRent) AS PotentinalRent, 
    Sum(Case t.Id When Null Then 0 
     Else r.MonthlyRent End) ExpectedRent 
From tblRentalUnit r 
    Left Join tblTenant t 
     On t.UnitID = r.ID 
    left Join tblProperty p 
     On p.ID = r.PropertyID) 
Group By p.OwnerName 
+0

नहीं, यह काम नहीं करता है। बाएं जुड़ने में आर। प्रॉपर्टीआईड भी दायरे में नहीं है। – Malfist

+0

हां, अब यह देखें, आपके स्कीमा में किराये की इकाई होना चाहिए –

संबंधित मुद्दे