2013-05-05 4 views
8

मैं निम्नलिखित टी SQL क्वेरी:समूह के आधार पर उर्फ ​​नाम

select 
    count(CaseId), 
    (SELECT DATEDIFF(day,CreateDate,LastActivityDate)) AS DiffDate 
from 
    VW_Case_Analysis 
where 
    CaseStatus = 'C' 
    and LastActivityDate between '2013-4-1 00:00:00.000' and '2013-4-30 23:59:59.000' 
Group By 
    DiffDate 

मैं निम्न त्रुटि हो रही है:

Msg 207, Level 16, State 1, Line 15
Invalid column name 'DiffDate'.

इस क्वेरी के पीछे विचार यह है कि मैं की संख्या प्राप्त करना चाहते हैं मामले कितने दिनों के भीतर हल (बंद)।

उदाहरण:

दिन

1 = 3 मामलों

2 = 50 मामलों

3 = 20 मामलों

मैं यह कैसे प्राप्त कर सकते हैं?

+0

अगर आप दे दी है यह मदद मिलेगी हमें टेबल संरचना। – acdcjunior

उत्तर

18

आपको GROUP BY खंड में पूरी अभिव्यक्ति का उपयोग करने की आवश्यकता है या केवल पूरे कथन को एक सबक्वायरी में लपेटने के लिए बाहरी कथन पर समूह करना है।

कारण है कि आप GROUP BY खंड है कि SELECT बयान के एक ही स्तर पर बनाई गई है पर ALIAS उपयोग नहीं कर सकते क्योंकि GROUP BYSELECT खंड जिसमें ALIAS बनाई गई है से पहले मार डाला जाता है।

इस ऑपरेशन की एसक्यूएल आदेश है:

    FROM खंड
  • कहां खंड
  • खंड
  • HAVING क्लॉज़
  • SELECT खंड
  • आदेश द्वारा समूह के BY खंड

इस क्वेरी को आज़माएं,

SELECT COUNT(CaseId), 
     DiffDate 
FROM 
     (
      select CaseId, 
        DATEDIFF(day,CreateDate,LastActivityDate) AS DiffDate 
      from VW_Case_Analysis 
      where CaseStatus = 'C' and 
        LastActivityDate between '2013-4-1 00:00:00.000' and '2013-4-30 23:59:59.000' 
     ) sub 
Group By DiffDate 
3

आप समूह द्वारा उपनाम में उपनाम का उपयोग नहीं कर सकते हैं।

या तो व्युत्पन्न तालिका का उपयोग करें या अपने मामले में सरल दूसरे चयन को हटा दें।

select 
    count(CaseId), 
    DATEDIFF(day,CreateDate,LastActivityDate) AS DiffDate 
from 
    VW_Case_Analysis 
where 
    CaseStatus = 'C' 
    and LastActivityDate between '2013-4-1 00:00:00.000' and '2013-4-30 23:59:59.000' 
Group By 
    DATEDIFF(day,CreateDate,LastActivityDate) 
0

क्या आपको यह वही परिणाम नहीं मिलेगा?

select Count(CaseId), 
        DATEDIFF(day,CreateDate,LastActivityDate) AS DiffDate 
      from VW_Case_Analysis 
      where CaseStatus = 'C' and 
        LastActivityDate between '2013-4-1 00:00:00.000' and '2013-4-30 23:59:59.000' 
GROUP BY DATEDIFF(day,CreateDate,LastActivityDate) 

मैं एसक्यूएल में एक नौसिखिया हूं इसलिए शायद मैं इसे सही ढंग से समझ नहीं रहा हूं। मैंने सही वाक्यविन्यास के साथ मेरी टिप्पणी ऊपर देखी लेकिन मुझे नहीं पता था कि यह सही था या नहीं ...

+0

हाय दान, जो एसक्यूएल आप प्रदान कर रहे हैं वह @ अहमद के समान ही प्रतीत होता है। तो यदि यह एक प्रश्न है तो इसे उत्तर के रूप में पोस्ट नहीं किया जाना चाहिए, अगर इसे उत्तर के रूप में सोचा जाता है तो डुप्लिकेट उत्तर की आवश्यकता नहीं होती है। शायद आप इसे हटा सकते हैं? – bummi

+0

हाय, इसके बारे में क्षमा करें। मैं किसी कारण से अपनी मूल टिप्पणी को हटाने में सक्षम नहीं हूं। – DK91

0

इस कार्यान्वयन चर्चा का एक आसान उदाहरण है

select selectResualt.num ,count(selectResualt.num) as count 
from (select src_num As num from mytable UNION ALL select dis_num As num from mytable) as selectResualt 
group by selectResualt.num 
order by count(selectResualt.num) DESC;> 
0

तुम इतनी तरह एक उपनाम बनाएं और GROUP BY खंड में इसका इस्तेमाल करने, CROSS APPLY उपयोग कर सकते हैं:

select 
    count(CaseId), 
    DiffDate 
from 
    VW_Case_Analysis 
cross apply 
    (SELECT DATEDIFF(day,CreateDate,LastActivityDate) AS DiffDate) Alias 
where 
    CaseStatus = 'C' 
    and LastActivityDate between '2013-4-1 00:00:00.000' and '2013-4-30 23:59:59.000' 
Group By 
    DiffDate 
संबंधित मुद्दे