मैं इस समस्या में रुचि थी, और मैं ने पाया है कि एक जटिल क्वेरी grok का सबसे अच्छा तरीका मेरी खुद की शैली और परंपराओं का उपयोग कर उसे पुन: प्रारूपित है। मैंने उन्हें आपके समाधान पर लागू किया, और परिणाम नीचे है। मुझे पता नहीं है, तो यह आपके लिए कोई मूल्य होगा ...
- ऐसे
({fn xxx }
और WEEK(xxx)
के रूप में कोड है कि मैं नहीं मानता कि एमएस टी SQL सिंटैक्स का हिस्सा हैं के कुछ बिट्स, थे समारोह।
- इस कोड को संकलित करता है, लेकिन मैं इसे नहीं चल सकता क्योंकि मैं एक डेटा तालिका ठीक से विन्यस्त नहीं है।
- मैं परिवर्तन है कि समझाने का एक गंभीर बहुत ले जाएगा कोडिंग के एक मेजबान बनाया है, और मुझे लगता है कि के सबसे छोड़ जा रहा हूँ। अगर आप कुछ भी खोजना चाहते हैं तो एक टिप्पणी जोड़ें।
- मैं खाली स्थान के का एक बहुत में फेंक दिया। सुस्पष्ट और गैरकानूनी कोड के बीच का अंतर अक्सर दर्शक की धारणा और संवेदनशीलता होती है, और आप मेरे सम्मेलनों से नफरत कर सकते हैं।
- सुनिश्चित नहीं हैं कि अंतिम परिणाम सेट होना चाहिए (यानी जो कॉलम लौटे हो)
कुछ आगे नोट:
- इस क्वेरी आइटम एक सप्ताह में प्रवेश किया नहीं होगा अगर कोई आइटम भी थे उस सप्ताह में बंद
- सप्ताह आंशिक हो सकते हैं, उदाहरण के लिए नहीं सातों दिन उपस्थित हो सकता है (@Interval समायोजित हमेशा पूर्ण सप्ताह जैसी - लेकिन क्या अजीब गिने अंतराल के बारे में) 1.0 से
- गुणा गिनती (*) मान जल्दी तैरता के लिए उन्हें बदलने के लिए (से बचा जाता है कलाकारों और पूर्णांक गणित काट-छांट)
- बनाया गया यह पहले सूत्रों बाद में सूत्रों में प्रतीकों द्वारा प्रतिस्थापित किया जा करने के लिए (जिस बिंदु पर बातें अधिक सुपाठ्य एक बहुत)
तो यहाँ बन अनुमति देने के लिए एक CTE क्या मैं के साथ आया है:
;WITH cte as (
select
c.period
,resolved_half1
,resolved_half2
,opened_half1
,opened_half2
,row = row_number() over(order by c.yearClosed, c.weekClosed)
,y1 = ((SUM(resolved_half1) + SUM(opened_half1)) - (SUM(resolved_half2) + SUM(opened_half2)))/((count(resolved_half1) + count(opened_half1))/2)
,y2 = ((SUM(resolved_half2) + SUM(opened_half2))/(count(resolved_half2) + COUNT (opened_half2)))
,x1 = ((count(c.period))/4)
,x2 = (((count(c.period))/4) * 3)
from (select
a.yearclosed
,a.weekClosed
,a.resolved_half1
,b.yearEntered
,b.weekEntered
,b.opened_half1
,cast(a.yearClosed as varchar(5)) + ', ' + cast(a.weekClosed as varchar(5)) period
from (-- Number of items per week that closed within @Interval
select
count(distinct TicketNbr) * 1.0 resolved_half1
,datepart(wk, date_closed) weekClosed
,year(date_closed) yearClosed
from v_rpt_Service
where date_closed >= @FullInterval
group by
datepart(wk, date_closed)
,year(date_closed)) a
left outer join (-- Number of items per week that were entered within @Interval
select
count(distinct TicketNbr) * 1.0 opened_half1
,datepart(wk, date_entered) weekEntered
,year(date_entered) yearEntered
from v_rpt_Service
where date_entered >= @FullInterval
group by
datepart(wk, date_entered)
,year(date_entered)) b
on a.weekClosed = b.weekEntered
and a.yearClosed = b.yearEntered) c
left outer join (select
d.yearclosed
,d.weekClosed
,d.resolved_half2
,e.yearEntered
,e.weekEntered
,e.opened_half2
,cast(yearClosed as varchar(5)) + ', ' + cast(weekClosed as varchar(5)) period
from (select
count(distinct TicketNbr) * 1.0 resolved_half2
,datepart(wk, date_closed) weekClosed
,year(date_closed) yearClosed
from v_rpt_Service
where date_closed >= @HalfInterval
group by
datepart(wk, date_closed)
,year(date_closed)) d
left outer join (select
count(distinct TicketNbr) * 1.0 opened_half2
,datepart(wk, date_entered) weekEntered
,year(date_entered) yearEntered
from v_rpt_Service
where date_entered >= @HalfInterval
group by
datepart(wk, date_entered)
,year(date_entered)) e
on d.weekClosed = e.weekEntered
and d.yearClosed = e.yearEntered) f
on c.period = f.period
group by
c.period
,resolved_half1
,resolved_half2
,opened_half1
,opened_half2
,c.yearClosed
,c.weekClosed
)
SELECT
row
,Period
,x1
,y1
,x2
,y2
,m = ((y1 - y2)/(x1 - x2))
,b = (y2 - (((y1 - y2)/(x1 - x2)) * x2))
,trend = ((((y1 - y2)/(x1 - x2)) * (row)) + (y2 - (((y1 - y2)/(x1 - x2)) * x2)))
from cte
order by row
एक परिशिष्ट के रूप में, सबक्वेरी के सभी "सी" सह उल कुछ को निम्न तरह से बदल दिया गया है, और "एफ" थोड़ा संशोधित संस्करण के साथ बदला जा सकता है। बेहतर या खराब प्रदर्शन टेबल आकार, अनुक्रमण, और अन्य imponderables पर निर्भर करता है।
select
datepart(wk, date_closed) weekClosed
,year(date_closed) yearClosed
,count (distinct case
when date_closed >= @FullInterval then TicketNbr
else null
end) resolved_half1
,count (distinct case
when date_entered >= @FullInterval then TicketNbr
else null
end) opened_half1
from v_rpt_Service
where date_closed >= @FullInterval
or date_entered >= @FullInterval
group by
datepart(wk, date_closed)
,year(date_closed)
क्या यह एमएस एसक्यूएल सर्वर के लिए है, या एक अलग आरडीबीएमएस के लिए है? –
एमएस एसक्यूएल सर्वर सही है। –