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

SQL COALESCE फ़ंक्शन का व्यावहारिक उपयोग

यह आलेख कुछ पेशेवर जीवन परिदृश्यों के संबंध में SQL COALESCE फ़ंक्शन के व्यावहारिक उपयोग के बारे में बात करता है। यह डेटाबेस से संबंधित समस्याओं के समाधान के लिए इस फ़ंक्शन के सही और समय पर उपयोग के महत्व पर प्रकाश डालता है।

इसके अतिरिक्त, हम इस फ़ंक्शन की सहायता से समस्याओं को हल करने के लिए आवश्यक विशेष चरणों को लागू करेंगे।

आवश्यकताएं

इस लेख में आने वाले उदाहरणों की समीक्षा करने और उन्हें लागू करने की तैयारी करने से पहले, निम्नलिखित मुद्दों से परिचित होने की अत्यधिक अनुशंसा की जाती है:

  • टी-एसक्यूएल की मूल बातें . पाठकों को टी-एसक्यूएल स्क्रिप्टिंग के बारे में अच्छी तरह से पता होना चाहिए। साथ ही, उन्हें नमूना डेटाबेस के विरुद्ध आराम से SQL क्वेरी लिखने और चलाने की आवश्यकता होती है।
  • COALESCE फ़ंक्शन की मूल बातें . पाठकों को इस क्षेत्र से परिचित होने की जरूरत है। यदि आपको इसका अध्ययन करने के लिए जानकारी की आवश्यकता है, तो लेख देखें SQL COALESCE फ़ंक्शन नल मानों को प्रभावी ढंग से संभालना

नमूना डेटाबेस

CoalesceUseDB . नामक एक नमूना डेटाबेस सेटअप करें इस प्रकार:

-- Setup sample database
Create DATABASE CoalesceUseDB;
GO

वैकल्पिक रूप से, आप tempdb . के विरुद्ध क्वेरी चला सकते हैं डेटाबेस यदि आप ऐसा करना पसंद करते हैं।

व्यावहारिक उपयोग के बारे में विचार

हम COALESCE फ़ंक्शन के दो व्यावहारिक उपयोग मामलों की समीक्षा करने जा रहे हैं। हमें यह ध्यान रखना चाहिए कि इस फ़ंक्शन का मुख्य लक्ष्य इनपुट (पैरामीटर) की सूची से पहला गैर-शून्य मान वापस करना है - पैरामीटर एक कॉलम भी हो सकता है।

ऐसे परिदृश्यों के दृष्टिकोणों में से एक भंडारण संरचना (तालिका) का उपयोग कर रहा है, जिसमें एकाधिक कॉलम होते हैं। सार्थक जानकारी बनाने के लिए उनमें से केवल एक कॉलम को भरने की आवश्यकता है।

आइए अब हम व्यावहारिक उपयोगों के बारे में जानें।

वेब होस्टिंग सदस्यता परिदृश्य

यहां, हम एक वेब होस्टिंग सेवा प्रदाता पर विचार करते हैं जिसकी (सशुल्क) सेवाएं कुछ ग्राहकों द्वारा उपयोग की जाती हैं। ग्राहक इनमें से किसी भी तरीके से मासिक, त्रैमासिक या वार्षिक भुगतान करना चुन सकते हैं।

अब, हम मानते हैं कि ग्राहकों ने अक्टूबर की शुरुआत में ही भुगतान किया है। इस प्रकार, हम डेटाबेस के दृष्टिकोण से एक सारणीबद्ध संरचना की कल्पना इस प्रकार करते हैं:

आदेश संग्रह करने के लिए तालिका बनाएं

हमें नमूना डेटाबेस के विरुद्ध उपलब्ध भुगतान विकल्पों में से किसी के माध्यम से ग्राहकों द्वारा किए गए सभी आदेशों को संग्रहीत करने के लिए एक तालिका बनाने की आवश्यकता है:

Use CoalesceUseDB

-- Create WebOrder table
CREATE TABLE [dbo].[WebOrder]
(
	[Id] INT NOT NULL, 
	[Customer] VARCHAR(40) NOT NULL, 
    [YearlyPayment] DECIMAL(10,2) NULL, 
    [QuarterlyPayment] DECIMAL(10,2) NULL, 
    [MonthlyPayment] DECIMAL(10,2) NULL, 
    [OrderDate] DATETIME2 NOT NULL, 
    CONSTRAINT [PK_WebOrder] PRIMARY KEY (Id) 
)

तालिका को इस प्रकार भरें:

-- Populate WebOrder table
INSERT INTO [dbo].[WebOrder] ([Id], [Customer], [YearlyPayment], [QuarterlyPayment], [MonthlyPayment], [OrderDate]) VALUES (1, N'Asif', CAST(70.00 AS Decimal(10, 2)), NULL, NULL, N'2020-10-01 00:00:00')
INSERT INTO [dbo].[WebOrder] ([Id], [Customer], [YearlyPayment], [QuarterlyPayment], [MonthlyPayment], [OrderDate]) VALUES (2, N'Peter', NULL, CAST(35.00 AS Decimal(10, 2)), NULL, N'2020-10-01 00:00:00')
INSERT INTO [dbo].[WebOrder] ([Id], [Customer], [YearlyPayment], [QuarterlyPayment], [MonthlyPayment], [OrderDate]) VALUES (3, N'Sarah', NULL, NULL, CAST(6.00 AS Decimal(10, 2)), N'2020-10-01 00:00:00')

त्वरित जांच

निम्न T-SQL स्क्रिप्ट चलाकर तालिका पर एक त्वरित नज़र डालें:

-- View WebOrder table
SELECT wo.Id,wo.Customer,wo.YearlyPayment,wo.QuarterlyPayment,wo.MonthlyPayment,wo.OrderDate 
FROM dbo.WebOrder wo

आउटपुट है:

समस्या की पहचान करें

सब अच्छा लग रहा है, लेकिन एक समस्या है।

हम सभी ग्राहकों के भुगतानों को देखना चाहते हैं, भले ही उन्होंने मासिक, वार्षिक या त्रैमासिक भुगतान किया हो। एनयूएलएल से बचकर इन सभी भुगतानों को एक साथ जोड़ने का कोई तरीका प्रतीत नहीं होता है, खासकर यदि आप सभी ग्राहकों के ऑर्डर वाली रिपोर्ट पर काम करते हैं और अनदेखा करते हैं कि उन्होंने मासिक, वार्षिक या त्रैमासिक भुगतान किया है या नहीं।

समाधान डिजाइन करें

समाधान COALESCE फ़ंक्शन का उपयोग करना है। यह इन सभी भुगतान विधियों को एक साथ जोड़ देगा और गैर-आवश्यक NULL मानों को बाहर कर देगा।

इसे निम्नानुसार आसानी से प्राप्त किया जा सकता है:

--View all the web orders regardless of the payment mode
SELECT wo.Id,wo.Customer,COALESCE(wo.YearlyPayment,wo.QuarterlyPayment,wo.MonthlyPayment) AS Payment,wo.OrderDate 
FROM dbo.WebOrder wo

आउटपुट है:

समाधान को बेहतर बनाने के लिए SQL व्यू का उपयोग करना

हम स्क्रिप्ट को SQL व्यू में बदलकर और विश्लेषण और रिपोर्टिंग के लिए इसका पुन:उपयोग करके इस समाधान को बेहतर बना सकते हैं:

-- Create AllWebOrders view
CREATE VIEW 
AllWebOrders
AS
SELECT wo.Id,wo.Customer,COALESCE(wo.YearlyPayment,wo.QuarterlyPayment,wo.MonthlyPayment) AS Payment,FORMAT(wo.OrderDate,'dd-MMM-yyyy') AS OrderDate
FROM dbo.WebOrder wo

दृश्य को इस प्रकार चलाएँ:

--Run SQL View to see all the web orders
SELECT awo.Id,awo.Customer,awo.Payment,awo.OrderDate
FROM dbo.AllWebOrders awo

परिणाम हैं:

संकेत:आप अंतर्निहित डेटा पुनर्प्राप्ति रणनीति के रूप में SQL दृश्य का उपयोग करके एक SSRS रिपोर्ट बना सकते हैं।

स्व-संदर्भित संगठन परिदृश्य

यह एक अधिक जटिल लेकिन अधिक सामान्य जीवन डेटाबेस से संबंधित परिदृश्य है।

इसे समझने का सबसे सरल तरीका पदानुक्रमित (माता-पिता-बच्चे) संबंध को आकर्षित करना है। यहां, हम सभी कर्मचारियों के रिकॉर्ड और उनके प्रबंधकों के रिकॉर्ड के साथ एक तालिका पर विचार करते हैं। यह तालिका प्रत्येक प्रबंधक को एक ही टेबल पर एक कर्मचारी के रूप में भी संग्रहीत करती है।

हालांकि, हम यहां पूरी तरह से कर्मचारी-प्रबंधक सारणीबद्ध संबंध पर ध्यान केंद्रित नहीं करेंगे।

आइए हम एक अभिभावक-बाल पदानुक्रम पर विचार करें जहां प्रत्येक संगठन एक मास्टर के अंतर्गत आता है। स्वयं-संदर्भित संबंध बनाने के लिए मास्टर संगठन को उसी संरचना में एक संगठन के रूप में संग्रहीत किया जाता है।

इसे समझने का सबसे अच्छा तरीका है संरचना का निर्माण करना और इसे स्वयं देखना।

मास्टर और उप-संगठनों को स्टोर करने के लिए एक टेबल बनाएं

मास्टर और उसके उप-संगठनों को निम्नानुसार संग्रहीत करने के लिए नमूना डेटाबेस में SQL तालिका बनाएं और पॉप्युलेट करें:

-- Creating master sub organisation table (self-referencing table)
CREATE TABLE [dbo].[Organisation]
(
	[Id] INT NOT NULL , 
    [Name] VARCHAR(40) NULL, 
	[Articles] INT NULL,
    [MasterId] INT NULL, 
    CONSTRAINT [PK_Organisation] PRIMARY KEY ([Id])
);
GO

-- Inserting data into the Organisation table
-- Populate Organisation table
INSERT INTO [dbo].[Organisation] ([Id], [Name], [Articles], [MasterId]) VALUES (1,'CodingSight',10, NULL)
INSERT INTO [dbo].[Organisation] ([Id], [Name], [Articles],[MasterId]) VALUES (2, 'SQL Blog', 2,1)
INSERT INTO [dbo].[Organisation] ([Id], [Name], [Articles],[MasterId]) VALUES (3, 'SSRS Blog', 3,1)
INSERT INTO [dbo].[Organisation] ([Id], [Name], [Articles],[MasterId]) VALUES (4,'CodingSight 2',5, NULL)
INSERT INTO [dbo].[Organisation] ([Id], [Name], [Articles],[MasterId]) VALUES (5, 'SSAS Blog', 1,4)
INSERT INTO [dbo].[Organisation] ([Id], [Name], [Articles],[MasterId]) VALUES (6,'SSIS Blog', 2,4)

त्वरित जांच और विश्लेषण

हम निम्न क्वेरी चलाकर नव निर्मित तालिका देख सकते हैं:

-- View Organisation table
SELECT o.Id,o.Name,o.MasterId
FROM dbo.Organisation o

फिर, हमें निम्नलिखित परिणाम मिलते हैं:

इस प्रकार, हम अनुमान लगा सकते हैं कि निम्नलिखित मास्टर संगठन तालिका में संग्रहीत हैं:

  1. कोडिंगसाइट
  2. कोडिंगसाइट 2

यदि आप MasterId कॉलम को देखते हैं, तो आप देख सकते हैं कि मास्टर संगठनों के पास NULL MasterId है। ऐसा इसलिए है क्योंकि वे मास्टर संगठन हैं।

निम्नलिखित संगठन कोडिंगसाइट मास्टर संगठन के अधीन हैं। उनके पास CodingSight . की ओर इशारा करते हुए MasterId है संगठन:

  1. एसक्यूएल ब्लॉग
  2. एसएसआरएस ब्लॉग

CodingSight 2 . के अंतर्गत निम्न उप-संगठनों के लिए भी यही सच है मास्टर संगठन:

  1. एसएसएएस ब्लॉग
  2. एसएसआईएस ब्लॉग

समस्या का विवरण

मान लीजिए कि हमें इन संगठनों द्वारा प्रकाशित सभी लेखों की एक रिपोर्ट विकसित करने की आवश्यकता है, जिसमें उनके उप-संगठन भी शामिल हैं, लेकिन उनका प्रतिनिधित्व मास्टर संगठन द्वारा किया जाता है।

सरल शब्दों में, हमें एक मास्टर संगठन द्वारा प्रकाशित सभी लेखों को दिखाने के लिए एक रिपोर्ट बनाने की आवश्यकता है, जिसमें उसके उप-संगठनों द्वारा प्रकाशित लेख भी शामिल हैं, लेकिन हम उप-संगठनों का उल्लेख नहीं कर सकते।

समाधान डिजाइन करें

COALESCE फ़ंक्शन यहां बहुत उपयोगी हो सकता है क्योंकि हमें मास्टर संगठन के लिए NULLs का सामना करना पड़ता है, लेकिन फ़ंक्शन में मास्टर और उप-संगठन डालने से कोई मदद नहीं मिलेगी।

उदाहरण के लिए, हम उनके आईडी को फ़ंक्शन में लपेटकर लेखों को संक्षेप में प्रस्तुत करने का प्रयास करते हैं:

-- Getting total articles for each of the master and sub-organization without using COALESCE
SELECT O.Id,O.MasterId,SUM(O.Articles) as Total_Articles FROM dbo.Organisation O
GROUP BY O.MasterId,O.Id

आउटपुट है:

अब, वांछित फ़ंक्शन का उपयोग करके आउटपुट में सुधार करें:

-- Getting total articles for each of the master and sub organizations using COALESCE
SELECT COALESCE(O.Id,O.MasterId) MasterOrSubId,O.Name,SUM(O.Articles) as Total_Articles FROM dbo.Organisation O
GROUP BY COALESCE(O.Id,O.MasterId),O.Name

आउटपुट है:

इन संगठनों द्वारा प्रकाशित लेखों की कुल संख्या प्राप्त करने के लिए हमने मास्टर और उप-संगठन आईडी को सफलतापूर्वक मर्ज कर दिया है।

वांछित परिणाम प्राप्त करने के लिए स्क्रिप्ट को और अधिक जटिल होना चाहिए क्योंकि हमें उप-संगठनों को उनके लेखों की संख्या को खोए बिना फ़िल्टर करने की आवश्यकता है। वह गिनती उनके मास्टर संगठनों को सौंपी जानी चाहिए।

इसे प्राप्त करने के लिए निम्नलिखित T-SQL स्क्रिप्ट लिखें:

-- Sum of all the articles published by the master organizations and their sub-organizations represented by the master organizations 
SELECT a.OrgId,o2.Name,a.Total_Articles FROM 
(SELECT COALESCE(O.MasterId,O.Id) AS OrgId,SUM(Articles) as Total_Articles FROM dbo.Organisation o
WHERE COALESCE(O.MasterId,O.Id) IN
(SELECT Id FROM dbo.Organisation where MasterId IS NULL)
GROUP BY COALESCE(O.MasterId,O.Id)) as a
INNER JOIN dbo.Organisation o2
on o2.Id=a.OrgId

आउटपुट है:

बधाई हो! हमने कुछ दिलचस्प रीयल-टाइम परिदृश्यों से संबंधित COALESCE फ़ंक्शन के व्यावहारिक उपयोग को सफलतापूर्वक सीख लिया है।

करने के लिए चीज़ें

अब जब आप NULL मानों को प्रभावी ढंग से संभाल सकते हैं और NULL मानों के साथ जटिल समस्याओं को हल कर सकते हैं, तो आपको व्यावसायिक आवश्यकताओं के अनुसार प्रतिस्थापित करने की आवश्यकता है। आइए आपके कौशल को और बेहतर बनाने के लिए निम्न चीज़ें आज़माएँ:

  1. स्व-संदर्भित संगठन परिदृश्य के लिए SQL दृश्य बनाने और चलाने का प्रयास करें:
  2. साधारण शब्दों में SSRS रिपोर्ट विकास को देखें लेख और वेब होस्टिंग परिदृश्य के लिए एक रिपोर्ट बनाएं।
  3. वेबऑर्डर में अधिक डेटा जोड़ें अलग-अलग आदेश दिनांक . की आपूर्ति करके तालिका वेब होस्टिंग सेवाओं के परिदृश्य में उल्लिखित मूल्य। फिर, SQL दृश्य को एक संग्रहीत कार्यविधि में बदल दें जो OrderDate . को स्वीकार करती है पैरामीटर।
  4. संग्रहीत प्रक्रिया के आधार पर पेशेवर SSRS रिपोर्ट बनाना का संदर्भ लें पिछले बिंदु में चर्चा की गई संशोधित परिदृश्य के लिए लेख और आदेश दिनांक-आधारित रिपोर्ट बनाएं।

यह भी पढ़ें

SQL COALESCE फ़ंक्शन पर 5 ज्वलंत प्रश्नों के शीर्ष उत्तर

शुरुआती के लिए SQL COALESCE फ़ंक्शन के साथ NULL मानों को प्रभावी ढंग से संभालना


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL में प्राथमिक कुंजी कैसे बनाएं

  2. डेटा स्रोत को कॉन्फ़िगर किए बिना ODBC लिंक्ड सर्वर बनाना

  3. डेटटाइम से ट्रिमिंग टाइम - एक फॉलो-अप

  4. एसक्यूएल और नोएसक्यूएल के बीच अंतर

  5. फ़िल्टर्ड इंडेक्स एक अधिक शक्तिशाली विशेषता कैसे हो सकती है