sql - एसक - डेटाबेस लैंग्वेज इन हिंदी
मैं एक आईएफ कैसे कर सकता हूं... फिर एक एसक्यूएल चयन में? (16)
SQL सर्वर 2012 से आप इसके लिए IIF
फ़ंक्शन का उपयोग कर सकते हैं।
SELECT IIF(Obsolete = 'N' OR InStock = 'Y', 1, 0) AS Salable, *
FROM Product
यह प्रभावी रूप से सिर्फ एक शॉर्टेंड (हालांकि मानक एसक्यूएल नहीं है) CASE
लिखने का तरीका है।
विस्तारित CASE
संस्करण के साथ तुलना करते समय मैं एकजुटता पसंद करता हूं।
IIF()
और IIF()
दोनों SQL स्टेटमेंट के भीतर अभिव्यक्ति के रूप में हल होते हैं और केवल अच्छी तरह से परिभाषित स्थानों में उपयोग किए जा सकते हैं।
CASE अभिव्यक्ति का उपयोग ट्रांजैक्ट-एसक्यूएल कथन, कथन ब्लॉक, उपयोगकर्ता परिभाषित कार्यों और संग्रहीत प्रक्रियाओं के निष्पादन के प्रवाह को नियंत्रित करने के लिए नहीं किया जा सकता है।
यदि आपकी ज़रूरतें इन सीमाओं से संतुष्ट नहीं हो सकती हैं (उदाहरण के लिए अलग-अलग आकार के परिणाम सेट करने की आवश्यकता कुछ शर्त पर निर्भर होती है) तो SQL सर्वर में एक प्रक्रियात्मक IF
कीवर्ड भी होता है।
IF @IncludeExtendedInformation = 1
BEGIN
SELECT A,B,C,X,Y,Z
FROM T
END
ELSE
BEGIN
SELECT A,B,C
FROM T
END
हालांकि इस दृष्टिकोण के साथ पैरामीटर स्नीफिंग मुद्दों से बचने के लिए कभी-कभी देखभाल की जानी चाहिए।
मैं एक IF...THEN
कैसे कर सकता हूं IF...THEN
एक SQL SELECT
कथन में?
उदाहरण के लिए:
SELECT IF(Obsolete = 'N' OR InStock = 'Y' ? 1 : 0) AS Saleable, * FROM Product
आप एसक्यूएल केस स्टेटमेंट्स की शक्ति में कुछ अच्छे उदाहरण पा सकते हैं, और मुझे लगता है कि आप जिस कथन का उपयोग कर सकते हैं वह इस तरह कुछ होगा ( 4guysfromrolla ):
SELECT
FirstName, LastName,
Salary, DOB,
CASE Gender
WHEN 'M' THEN 'Male'
WHEN 'F' THEN 'Female'
END
FROM Employees
उदाहरण। कुछ इस तरह।
SELECT Salable =
CASE Obsolete
WHEN 'N' THEN 1
ELSE 0
END
उन लोगों के लिए जो SQL Server 2012 का उपयोग करते हैं, आईआईएफ एक ऐसी सुविधा है जिसे केस स्टेटमेंट के विकल्प के रूप में जोड़ा गया है और काम करता है।
SELECT IIF(Obsolete = 'N' OR InStock = 'Y', 1, 0) AS Salable, *
FROM Product
एक नई सुविधा, IIF (जिसे हम आसानी से उपयोग कर सकते हैं), SQL सर्वर 2012 में जोड़ा गया था:
SELECT IIF ( (Obsolete = 'N' OR InStock = 'Y'), 1, 0) AS Saleable, * FROM Product
एसक्यूएल सर्वर में सरल अगर-और कथन:
DECLARE @val INT;
SET @val = 15;
IF @val < 25
PRINT 'Hi Ravi Anand';
ELSE
PRINT 'By Ravi Anand.';
GO
नेस्टेड अगर ... एसक्यूएल सर्वर में अन्य कथन -
DECLARE @val INT;
SET @val = 15;
IF @val < 25
PRINT 'Hi Ravi Anand.';
ELSE
BEGIN
IF @val < 50
PRINT 'what''s up?';
ELSE
PRINT 'Bye Ravi Anand.';
END;
GO
माइक्रोसॉफ्ट एसक्यूएल सर्वर (टी-एसक्यूएल)
एक चुनिंदा उपयोग में:
select case when Obsolete = 'N' or InStock = 'Y' then 'YES' else 'NO' end
जहां एक खंड में, उपयोग करें:
where 1 = case when Obsolete = 'N' or InStock = 'Y' then 1 else 0 end
यदि आप पहली बार तालिका में परिणामों को सम्मिलित कर रहे हैं, तो एक तालिका से दूसरे में परिणामों को स्थानांतरित करने के बजाय, यह ओरेकल 11.2 जी में काम करता है:
INSERT INTO customers (last_name, first_name, city)
SELECT 'Doe', 'John', 'Chicago' FROM dual
WHERE NOT EXISTS
(SELECT '1' from customers
where last_name = 'Doe'
and first_name = 'John'
and city = 'Chicago');
शुद्ध बिट तर्क का प्रयोग करें:
DECLARE @Product TABLE (
id INT PRIMARY KEY IDENTITY NOT NULL
,Obsolote CHAR(1)
,Instock CHAR(1)
)
INSERT INTO @Product ([Obsolote], [Instock])
VALUES ('N', 'N'), ('N', 'Y'), ('Y', 'Y'), ('Y', 'N')
;
WITH cte
AS
(
SELECT
'CheckIfInstock' = CAST(ISNULL(NULLIF(ISNULL(NULLIF(p.[Instock], 'Y'), 1), 'N'), 0) AS BIT)
,'CheckIfObsolote' = CAST(ISNULL(NULLIF(ISNULL(NULLIF(p.[Obsolote], 'N'), 0), 'Y'), 1) AS BIT)
,*
FROM
@Product AS p
)
SELECT
'Salable' = c.[CheckIfInstock] & ~c.[CheckIfObsolote]
,*
FROM
[cte] c
कामकाजी डेमो देखें : अगर एमएसएसक्यूएल में मामले के बिना
प्रारंभ के लिए, आपको चयनित स्थितियों के लिए true
और false
के मूल्य को काम करने की आवश्यकता है। यहां दो NULLIF :
for true: ISNULL(NULLIF(p.[Instock], 'Y'), 1)
for false: ISNULL(NULLIF(p.[Instock], 'N'), 0)
एक साथ संयुक्त 1 या 0 देता है। अगला बिटवाई ऑपरेटरों का उपयोग करें।
यह सबसे WYSIWYG विधि है।
CASE
कथन SQL में IF के सबसे नज़दीक है और SQL सर्वर के सभी संस्करणों पर समर्थित है
SELECT CAST(
CASE
WHEN Obsolete = 'N' or InStock = 'Y'
THEN 1
ELSE 0
END AS bit) as Saleable, *
FROM Product
यदि आप एक बूलियन मान के रूप में परिणाम चाहते हैं, तो आपको केवल CAST
करने की आवश्यकता है, यदि आप किसी int
खुश हैं, तो यह काम करता है:
SELECT CASE
WHEN Obsolete = 'N' or InStock = 'Y'
THEN 1
ELSE 0
END as Saleable, *
FROM Product
CASE
स्टेटमेंट अन्य CASE
स्टेटमेंट्स में एम्बेड किए जा सकते हैं और यहां तक कि समेकित भी शामिल हैं।
एसक्यूएल सर्वर डेनाली (एसक्यूएल सर्वर 2012) IIF स्टेटमेंट जोड़ता है जो access में भी उपलब्ध है: ( मार्टिन स्मिथ द्वारा इंगित)
SELECT IIF(Obsolete = 'N' or InStock = 'Y', 1, 0) as Saleable, * FROM Product
SELECT IIF(Obsolete = 'N' OR InStock = 'Y',1,0) AS Saleable, * FROM Product
SELECT
CASE
WHEN OBSOLETE = 'N' or InStock = 'Y' THEN 'TRUE'
ELSE 'FALSE'
END AS Salable,
*
FROM PRODUCT
SELECT
(CASE
WHEN (Obsolete = 'N' OR InStock = 'Y') THEN 'YES'
ELSE 'NO'
END) as Salable
, *
FROM Product
SELECT 1 AS Saleable, *
FROM @Product
WHERE ( Obsolete = 'N' OR InStock = 'Y' )
UNION
SELECT 0 AS Saleable, *
FROM @Product
WHERE NOT ( Obsolete = 'N' OR InStock = 'Y' )
SELECT CASE WHEN profile.nrefillno = 0 THEN 'N' ELSE 'R'END as newref
From profile
case statement some what similar to if in SQL server
SELECT CASE
WHEN Obsolete = 'N' or InStock = 'Y'
THEN 1
ELSE 0
END as Saleable, *
FROM Product