Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

शून्य मान शामिल करने के लिए SQL गणना

WHERE क्लॉज इतना नहीं, बल्कि ग्रुप बाय। क्वेरी केवल उन पंक्तियों के लिए डेटा लौटाएगी जो मौजूद हैं। इसका मतलब है कि जब आप टाइमस्टैम्प की तारीख के आधार पर समूह बना रहे हैं, तो केवल वे दिन लौटाए जाएंगे जिनके लिए पंक्तियां हैं। SQL सर्वर संदर्भ से नहीं जान सकता है कि आप "रिक्त स्थान भरना" चाहते हैं, और यह नहीं जानता कि किसके साथ।

सामान्य उत्तर एक सीटीई है जो उन सभी दिनों का उत्पादन करता है जिन्हें आप देखना चाहते हैं, इस प्रकार रिक्त स्थान भरते हैं। यह थोड़ा मुश्किल है क्योंकि इसके लिए एक पुनरावर्ती SQL कथन की आवश्यकता होती है, लेकिन यह एक प्रसिद्ध चाल है:

WITH CTE_Dates AS
(
    SELECT @START AS cte_date
    UNION ALL
    SELECT DATEADD(DAY, 1, cte_date)
    FROM CTE_Dates
    WHERE DATEADD(DAY, 1, cte_date) <= @END
)
SELECT
cte_date as TIME_STAMP,
ISNULL(COUNT(HL_Logs.Time_Stamp), 0) AS counted_leads, 
FROM CTE_Dates
LEFT JOIN HL_Logs ON DATEADD(dd, 0, DATEDIFF(dd, 0, Time_Stamp)) = cte_date
WHERE Time_Stamp between @BEGIN and @END and ID_Location = @LOCATION
GROUP BY cte_date

इसे तोड़कर, सीटीई एक संघ का उपयोग करता है जो पिछली तारीख में एक बार में एक दिन को दोबारा जोड़ने के लिए संदर्भित करता है और उस तारीख को तालिका के हिस्से के रूप में याद रखता है। यदि आपने सीटीई का उपयोग करने वाला एक साधारण कथन चलाया है और उसमें से केवल * चुना है, तो आपको प्रारंभ और समाप्ति के बीच की तिथियों की एक सूची दिखाई देगी। फिर, स्टेटमेंट तारीखों की इस सूची को लॉग टाइमस्टैम्प तिथि के आधार पर लॉग टेबल में जोड़ता है, जबकि उन तारीखों को संरक्षित करता है जिनमें लेफ्ट जॉइन का उपयोग करके कोई लॉग एंट्री नहीं होती है ("बाईं ओर से सभी पंक्तियों को लेता है कि क्या उनके पास" पर मेल खाने वाली पंक्तियाँ हैं। राइट" साइड या नहीं)। अंत में, हम तिथि के अनुसार समूह बनाते हैं और इसके बजाय गिनती करते हैं और हमें वह उत्तर मिलना चाहिए जो आप चाहते हैं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. चयन कथनों में NOLOCK संकेत का प्रभाव

  2. उसी तालिका में चयन करें, संशोधित करें और डालें

  3. अपनी आवश्यकताओं के अनुरूप SQL सर्वर मॉनिटरिंग टूल चुनना

  4. पारंपरिक लूप का उपयोग किए बिना एसक्यूएल सर्वर में किसी संख्या के अंकों का योग जबकि

  5. SQL सर्वर में टेक्स्ट कॉलम कैसे पिवट करें?