/ / SQL सर्वर - पहले जहां खंड और यदि मान्य दूसरा निष्पादित न करें - SQL, sql- सर्वर, केस, जहां, खंड निष्पादित करें

एसक्यूएल सर्वर - पहले निष्पादित करें जहां खंड और यदि मान्य दूसरे - एसक्यूएल, एसक्यूएल-सर्वर, केस, जहां, खंड निष्पादित नहीं करता है

मेरे पास SQL ​​सर्वर चयन विवरण है:

SELECT *
FROM Table
WHERE(ClientPlants = 621 AND Carriers = 226)
OR (Carriers = 226 AND ClientPlants IS NULL)
ORDER BY ClientPlants

अब समस्या यह है कि पहला कब है वैध, यह अभी भी "या" के बाद दूसरे खंड को निष्पादित करता है। मैं इसे कैसे बनाऊं ताकि पहला खंड विफल होने पर दूसरा खंड निष्पादित हो?

जैसे कि, अगर कोई परिणाम नहीं मिला, जहां के लिएखण्ड 1 (ClientPlants = 621 और वाहक = 226), 2 पर जाएं (वाहक = 226 और ClientPlants IS NULL)। यदि क्लॉज़ 1 का परिणाम है, तो क्वेरी लौटाएँ और रोकें।

मैंने CASE स्टेटमेंट देखने की कोशिश की, लेकिन यह नहीं देखा कि इसे अपने कोड में कैसे जोड़ूं।

अग्रिम में धन्यवाद!

उत्तर:

उत्तर № 1 के लिए 1

क्या आपका मतलब कुछ इस तरह का था:

IF EXISTS (SELECT * FROM Table WHERE ClientPlants = 621 AND Carriers = 226)
SELECT * FROM Table WHERE ClientPlants = 621 AND Carriers = 226 ORDER BY ClientPlantsK
ELSE
SELECT * FROM Table WHERE Carriers = 226 ORDER BY ClientPlantsK
;

अद्यतन करें:

यह देखते हुए कि आप केवल 1 पंक्ति वापस करना चाहते हैं, मुझे लगता है कि कुछ इस तरह से एक संग्रहीत प्रक्रिया में एक एकल टी-SQL क्वेरी के लिए काम करेगा:

CREATE PROCEDURE ProcedureName
@ClientPlants int
, @Carriers int
AS

SELECT
Carriers
, ClientPlants
-- Add the rest of the columns
FROM
(
SELECT
Carriers
, ClientPlants
-- Add the rest of the columns
, ROW_NUMBER() OVER (ORDER BY CASE WHEN ClientPlants = @ClientPlants THEN 0 ELSE 1 END) R
FROM Table
WHERE Carriers = @Carriers
) Q
WHERE R = 1

उपयोग:

EXEC ProcedureName 621, 226

मैंने आपको उपयोग करने के बजाय अपने कॉलम का नाम देने की सिफारिश की है SELECT * स्तंभ होने से बचने के लिए R आउटपुट में ।


उत्तर № 2 के लिए 1

आप उपयोग कर सकते हैं CASE WHEN:

SELECT *
FROM Table
WHERE (CASE WHEN ClientPlants = 621 AND Carriers IN (226) THEN 1
WHEN Carriers IN (226) THEN 1
ELSE 0
END) = 1
ORDER BY ClientPlantsK;

जवाब के लिए 0 № 3

क्या तुम्हारा यह मतलब था?

SELECT a.*
CASE WHEN ClientPlants = 621 AND Carriers = 226 THEN column
WHEN ClientPlans <> 621 AND Carriers = 226 THEN column
ELSE NULL
END Column

FROM table A