मैं पिछले 24 महीनों के लिए, महीने के हिसाब से बिक्री की रिपोर्ट करना चाहता हूं। अगले महीने संख्याओं के 25वें महीने के सेट को रिपोर्ट छोड़ देनी चाहिए और पिछले 24 महीनों को फिर से दिखाना चाहिए। मुझे यकीन नहीं है कि वर्ष परिवर्तन को संभालने के लिए क्वेरी कैसे लिखनी है। यही सब कुछ मेरे पास है।

select  [Amount] * -1 as 'Parts Not Sold On Service Order Current', 0 as 'Parts Sold     On Service Order', [Document Date]
from    [G_L Entry]
where   [G_L Account No_] between '40000' and '49999'
and     [Dimension code] = 'par'
and     [Document No_] not like 'PSV%'
AND     YEAR([Document Date]) = YEAR(CURRENT_TIMESTAMP)
AND     MONTH([Document Date]) = MONTH(CURRENT_TIMESTAMP)

union

    select  [Amount] * -1 as 'Parts Not Sold On Service Order Current -1', 0 as 'Parts Sold     On Service Order', [Document Date]
from    [G_L Entry]
where   [G_L Account No_] between '40000' and '49999'
and     [Dimension code] = 'par'
and     [Document No_] not like 'PSV%'
AND     YEAR([Document Date]) = YEAR(CURRENT_TIMESTAMP) 
AND     MONTH([Document Date]) = MONTH(CURRENT_TIMESTAMP) -1

union

    select  [Amount] * -1 as 'Parts Not Sold On Service Order Current -2', 0 as 'Parts Sold     On Service Order', [Document Date]
from    [G_L Entry]
where   [G_L Account No_] between '40000' and '49999'
and     [Dimension code] = 'par'
and     [Document No_] not like 'PSV%'
AND     YEAR([Document Date]) = YEAR(CURRENT_TIMESTAMP) 
AND     MONTH([Document Date]) = MONTH(CURRENT_TIMESTAMP) -2

यह पिछले वर्ष में जाने के बाद उसी वर्ष के परिणामों को दोहराना शुरू कर देता है। माह पिछले वर्ष से केवल 5 महीने का हो सकता है। अगला महीना 6 महीने का होगा। इसे संभालने के लिए मैं क्वेरी कैसे लिखूं?

0
Craig Zirnheld 11 मई 2016, 18:25

1 उत्तर

सबसे बढ़िया उत्तर

यह मानते हुए कि आपकी क्वेरी वैसे ही काम कर रही है जैसे आप इसे पहले से ही हर दूसरे पहलू में चाहते हैं, अपने WHERE स्टेटमेंट में निम्नलिखित को जोड़ने का प्रयास करें:

AND DateDiff(Month, [Document Date], CURRENT_TIMESTAMP) < 24

आपको अपनी विशेष रिपोर्ट के लिए इसे ठीक से प्राप्त करने के लिए इसके साथ थोड़ा खेलना पड़ सकता है (उदाहरण के लिए, "<23", "< 25", आदि)

मैं एक दिमागी पाठक नहीं हूं, लेकिन इसे आपके वर्तमान WHERE कथन में एकीकृत करने से आपको वह मिल सकता है जो आप चाहते हैं और आपकी क्वेरी को निम्नलिखित तक छोटा कर सकते हैं (आपके union के बिना):

select  [Amount] * -1 as 'Parts Not Sold On Service Order Current', 0 as 'Parts Sold On Service Order', [Document Date]
from    [G_L Entry]
where   [G_L Account No_] between '40000' and '49999'
and     [Dimension code] = 'par'
and     [Document No_] not like 'PSV%'
AND     DateDiff(Month, [Document Date], CURRENT_TIMESTAMP) < 24
1
Sturgus 11 मई 2016, 18:43
बूम !! उत्तम। मैं रिपोर्टिंग सॉफ्टवेयर के भीतर महीनों को तोड़ सकता हूं। धन्यवाद। मैं दिनांक समय कार्यों के बारे में और अधिक जानना चाहता/चाहती हूं। सिफारिश करने के लिए यहां या अन्य जगहों पर कोई अच्छा लेख?
 – 
Craig Zirnheld
11 मई 2016, 18:46
1
ज़िरहेल्ड, क्षमा करें, मैं किसी भी अच्छे ट्यूटोरियल-शैली वाले के बारे में नहीं जानता। मैंने अभी-अभी MSDN को SQL सर्वर-प्रकार के प्रश्नों के 99% के लिए पढ़ा है समय।
 – 
Sturgus
11 मई 2016, 19:01