2011-03-06 11 views
5

मुख्य रूप से एक सी # डेवलपर होने के नाते, मैं तिथि सीमाओं के एक सेट के बाद सारांश/दिन समेत किसी समस्या के लिए शुद्ध टी-एसक्यूएल आधारित समाधान बनाने की कोशिश करते समय अपने सिर को खरोंच कर रहा हूं।तिथि सीमाओं के आधार पर प्रति माह दिन सारांशित करें

मैं कुछ इस तरह की तलाश में डेटा का एक सेट है:

UserID Department StartDate EndDate 
====== ========== ========== ========== 
1  A   2011-01-02 2011-01-05 
1  A   2011-01-20 2011-01-25 
1  A   2011-02-25 2011-03-05 
1  B   2011-01-21 2011-01-22 
2  A   2011-01-01 2011-01-20 
3  C   2011-01-01 2011-02-03 

तिथि सीमाओं, गैर अतिव्यापी हैं, कई महीनों की अवधि सकता है वहाँ एक महीने के भीतर एक विशिष्ट उपयोगकर्ता और विभाग के लिए कई पर्वतमाला मौजूद हो सकता है । मुझे क्या करना चाहते हैं दिन (सम्मिलित) प्रति उपयोगकर्ता, विभाग, माह और वर्ष की संख्या, इस तरह संक्षेप में प्रस्तुत करने के लिए है (मेरे उदाहरण में किसी भी गणित त्रुटियों के लिए आरक्षण के साथ ...):

UserID Department Year Month Days 
====== ========== ==== ===== ==== 
1  A   2011 01  10 
1  A   2011 02  4 
1  A   2011 03  5 
1  B   2011 01  2 
2  A   2011 01  20 
3  C   2011 01  31 
3  C   2011 02  3 

यह डेटा रिपोर्टिंग टूल द्वारा उपयोग की जाने वाली एक नई तालिका में जा रहा है। मुझे उम्मीद है कि समस्या का विवरण पर्याप्त स्पष्ट है, यह मेरा पहला पोस्टिंग है, नम्र हो :-)

अग्रिम धन्यवाद!

उत्तर

8

कार्य नमूना

-- sample data in a temp table 
declare @t table (UserID int, Department char(1), StartDate datetime, EndDate datetime) 
insert @t select 
1 ,'A', '2011-01-02','2011-01-05'union all select 
1 ,'A', '2011-01-20','2011-01-25'union all select 
1 ,'A', '2011-02-25','2011-03-05'union all select 
1 ,'B', '2011-01-21','2011-01-22'union all select 
2 ,'A', '2011-01-01','2011-01-20'union all select 
3 ,'C', '2011-01-01','2011-02-03' 

-- the query you need is below this line  

select UserID, Department, 
    YEAR(StartDate+v.number) Year, 
    MONTH(StartDate+v.number) Month, COUNT(*) Days 
from @t t 
inner join master..spt_values v 
    on v.type='P' and v.number <= DATEDIFF(d, startdate, enddate) 
group by UserID, Department, YEAR(StartDate+v.number), MONTH(StartDate+v.number) 
order by UserID, Department, Year, Month 
+0

धन्यवाद! ** मास्टर..spt_values ​​** के ठीक, दिलचस्प उपयोग का काम करता है, पहले उस सिस्टम तालिका का सामना नहीं किया है। ** मास्टर..spt_values ​​** पर अधिक जानकारी प्राप्त की जा सकती है [यहां] (http://stackoverflow.com/questions/4273723/what-is-the-purpose-of-system-table-table-master-spt- मूल्यों और क्या-हैं-विदेश मंत्रालय)। मूल "टैली टेबल" का उपयोग करने के लिए –

+0

+1। ;-) –

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