IF'i necə yerinə yetirirsiniz? ... SEÇ SQL SELECT?

IF-i necə yerinə yetirirsiniz? ... sonra SQL SELECT deyişində?

Məsələn:

 SELECT IF(Obsolete = 'N' OR InStock = 'Y' ? 1 : 0) AS Saleable, * FROM Product 
1078
15 сент. Eric Labashosky tərəfindən təyin edilən 15 Sentyabr. 2008-09-15 17:34 '08 at 17:34 2008-09-15 17:34
@ 22 cavab

CASE bəyanatı SQL-də ən yaxşısıdır və SQL Server-ın bütün versiyalarında dəstəklənir

 SELECT CAST( CASE WHEN Obsolete = 'N' or InStock = 'Y' THEN 1 ELSE 0 END AS bit) as Saleable, * FROM Product 

Nəticəni bir Boole dəyəri şəklində almaq istəyirsinizsə, yalnız bir şeylə razı olsanız, bu, işləyir:

 SELECT CASE WHEN Obsolete = 'N' or InStock = 'Y' THEN 1 ELSE 0 END as Saleable, * FROM Product 
Operatorlar

CASE başqa CASE ifadələrinə yerləşdirilə və hətta aqreqatlara daxil edilə bilər.

SQL Server Denali (SQL Server 2012) IIF hesabatını əlavə edir, bu da mövcuddur: ( Martin Smith tərəfindən göstərilmişdir)

 SELECT IIF(Obsolete = 'N' or InStock = 'Y', 1, 0) as Saleable, * FROM Product 
1297
15 сент. Cavab Darrel Miller tərəfindən verilir . 2008-09-15 17:38 '08 at 5:38 pm 2008-09-15 17:38

Bu vəziyyət sizin dostunuzdur və iki formadan birini alır:

Sadə vəziyyət:

 SELECT CASE <variable> WHEN <value> THEN <returnvalue> WHEN <othervalue> THEN <returnthis> ELSE <returndefaultcase> END AS <newcolumnname> FROM <table> 
border=0

Genişləndirilmiş vəziyyət:

 SELECT CASE WHEN <test> THEN <returnvalue> WHEN <othertest> THEN <returnthis> ELSE <returndefaultcase> END AS <newcolumnname> FROM <table> 

Hətta həqiqətən xülya sifariş üçün maddə ilə bir ardıcıl argumentlər qoymaq olar.

238
15 сент. Jonathan Sep 15- ə cavab verin 2008-09-15 18:10 '08 saat 06:10 'da 2008-09-15 18:10

SQL Server 2012-də IIF istifadə edə bilərsiniz.

 SELECT IIF(Obsolete = 'N' OR InStock = 'Y', 1, 0) AS Salable, * FROM Product 

Bu, əslində, CASE yazmaq üçün yalnız qısaltılmışdır (standart SQL deyil).

CASE'in genişletilmiş bir versiyası üzərində kıvrımı tercih ederim.

Hər ikisi də IIF()CASE SQL ifadəsində ifadələr kimi həll edilir və yalnız yaxşı təyin edilmiş yerlərdə istifadə edilə bilər.

Bir CASE ifadəsi Transact-SQL hesabatlarının, sütun bloklarının, istifadəçi tərəfindən müəyyən edilmiş funksiyaların və saxlanılan prosedurların axınına nəzarət etmək üçün istifadə edilə bilməz.

Əgər ehtiyaclarınız bu məhdudiyyətlər ilə qarşılanmırsa (məsələn, müəyyən bir hala bağlı olaraq müxtəlif nəticə dəstlərini geri qaytarma zərurəti), SQL Server da prosessual IF sözcüyünə malikdir.

 IF @IncludeExtendedInformation = 1 BEGIN SELECT A,B,C,X,Y,Z FROM T END ELSE BEGIN SELECT A,B,C FROM T END 

Bəzən bu yanaşma ilə parametrlərlə bağlı problemlərin qarşısını almaq lazımdır.

187
21 июля '11 в 2:39 2011-07-21 02:39 Cavab Martin Smith'in 21 iyul 'da 2:39' də 2011-07-21 02:39 'da verildi

SQL CASE -in gücündə bəzi yaxşı nümunələr tapacaqsınız və mən istifadə edə biləcəyiniz bəyanat bu kimi bir şey olacaq ( 4guysfromrolla ):

 SELECT FirstName, LastName, Salary, DOB, CASE Gender WHEN 'M' THEN 'Male' WHEN 'F' THEN 'Female' END FROM Employees 
64
15 сент. cavab 15 sentyabrda Sven tərəfindən verilir . 2008-09-15 17:39 '08 saat 17:39 'da 2008-09-15 17:39

CASE istifadə edin. Belə bir şey.

 SELECT Salable = CASE Obsolete WHEN 'N' THEN 1 ELSE 0 END 
63
15 сент. Cavab palehorse 15 sep tərəfindən verilir . 2008-09-15 17:37 '08, 5:37 pm 2008-09-15 17:37
 SELECT (CASE WHEN (Obsolete = 'N' OR InStock = 'Y') THEN 'YES' ELSE 'NO' END) as Salable , * FROM Product 
37
15 сент. John Sheehan tərəfindən verilmiş cavab - Runscope Sep 15 2008-09-15 17:37 '08, 5:37 pm 2008-09-15 17:37

Microsoft SQL Server (T-SQL)

Seçimdə istifadə edin:

 select case when Obsolete = 'N' or InStock = 'Y' then 'YES' else 'NO' end 

Maddənin istifadə etdiyi yerlərdə:

 where 1 = case when Obsolete = 'N' or InStock = 'Y' then 1 else 0 end 
32
15 сент. cavab user7658 15 sep tərəfindən verilir . 2008-09-15 17:40 '08 saat 17:40 'da 2008-09-15 17:40
  SELECT CASE WHEN OBSOLETE = 'N' or InStock = 'Y' THEN 'TRUE' ELSE 'FALSE' END AS Salable, * FROM PRODUCT 
32
15 сент. Santiago Cepas tərəfindən verilmiş cavab 15 sentyabr 2008-09-15 17:37 '08, 5:37 pm 2008-09-15 17:37

Bu linkdən IF THEN ELSE T-SQL də ELSE-ni ifa edə bilərik:

 IF EXISTS(SELECT * FROM Northwind.dbo.Customers WHERE CustomerId = 'ALFKI') PRINT 'Need to update Customer Record ALFKI' ELSE PRINT 'Need to add Customer Record ALFKI' IF EXISTS(SELECT * FROM Northwind.dbo.Customers WHERE CustomerId = 'LARSE') PRINT 'Need to update Customer Record LARSE' ELSE PRINT 'Need to add Customer Record LARSE' 

Bu T-SQL üçün kifayət deyil?

29
06 янв. Cavab Ken Jan 06 verilir 2010-01-06 04:02 '10 at 4:02 2010-01-06 04:02

SQL Server-da sadə bir if-else bəyanatı:

 DECLARE @val INT; SET @val = 15; IF @val < 25 PRINT 'Hi Ravi Anand'; ELSE PRINT 'By Ravi Anand.'; GO 

Daxil olsaydı ... başqa bir sql serverdə əmr -

 DECLARE @val INT; SET @val = 15; IF @val < 25 PRINT 'Hi Ravi Anand.'; ELSE BEGIN IF @val < 50 PRINT 'what' up?'; ELSE PRINT 'Bye Ravi Anand.'; END; GO 
21
17 дек. Cavab Ravi Anand tərəfindən 17 dekabr. 2015-12-17 20:24 '15 at 8:24 pm 2015-12-17 20:24

CASE ifadəsini istifadə edin:

 SELECT CASE WHEN (Obsolete = 'N' OR InStock = 'Y') THEN 'Y' ELSE 'N' END as Available etc... 
16
15 сент. Christopher Sep 15 tərəfindən verilmiş cavab 2008-09-15 17:40 '08 saat 17:40 'da 2008-09-15 17:40

Saf bit mantığını istifadə edin:

 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 

İşçi demosuna baxın : MSSQL'DE OLMAYAN VƏ YAXŞI

Əvvəlcə seçilmiş şərtlər üçün truefalse dəyərləri işləməlisiniz. Burada iki null vardır :

 for true: ISNULL(NULLIF(p.[Instock], 'Y'), 1) for false: ISNULL(NULLIF(p.[Instock], 'N'), 0) 

birlikdə 1 və ya 0. verir.

Bu ən WYSIWYG üsuludur.

16
09 июня '13 в 1:21 2013-06-09 01:21 cavab Tomasito 09 iyun 2013 - il saat 01:21 da verilir

Yeni bir IIF xüsusiyyəti SQL Server 2012-yə əlavə edildi (yalnız istifadə edə biləcəyimiz):

 SELECT IIF ( (Obsolete = 'N' OR InStock = 'Y'), 1, 0) AS Saleable, * FROM Product 
14
26 апр. Cavab sandeep rawat verilir 26 Apr. 2016-04-26 18:10 '16 saat 18:10 'da 2016-04-26 18:10
 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' ) 
12
11 мая '16 в 18:56 2016-05-11 18:56 Cavab 11 may, '16 'da 18:56 2016-05-11 18:56 tarixində verilir
 SELECT CASE WHEN profile.nrefillno = 0 THEN 'N' ELSE 'R'END as newref From profile 
9
25 авг. Cavab atik sarker tərəfindən verilir 25 aug. 2015-08-25 12:44 '15 'də saat 12:44' de
 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 
8
09 дек. Cavab Chanukya 09 dekabr verilir . 2015-12-09 15:15 '15 'də 15:15' də 2015-12-09 15:15

Nəticələri ilk dəfə bir masaya yerləşdirirsinizsə və nəticələri bir cədvəldən digərinə köçürməsəniz, bu, Oracle 11.2g:

 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'); 
8
26 окт. Cavab Robert B. Grossman 26 oktyabr. 2012-10-26 18:30 '12 saat 18:30 'da 2012-10-26 18:30' da

Bu cavab deyil, işlədiyim yerdə istifadə edilən CASE ifadəsinin yalnız bir nümunəsidir. İçindəki CASE ifadəsi var. İndi mənim gözlərim niyə kəsişdiyini bilirsiniz.

  CASE orweb2.dbo.Inventory.RegulatingAgencyName WHEN 'Region 1' THEN orweb2.dbo.CountyStateAgContactInfo.ContactState WHEN 'Region 2' THEN orweb2.dbo.CountyStateAgContactInfo.ContactState WHEN 'Region 3' THEN orweb2.dbo.CountyStateAgContactInfo.ContactState WHEN 'DEPT OF AGRICULTURE' THEN orweb2.dbo.CountyStateAgContactInfo.ContactAg ELSE ( CASE orweb2.dbo.CountyStateAgContactInfo.IsContract WHEN 1 THEN orweb2.dbo.CountyStateAgContactInfo.ContactCounty ELSE orweb2.dbo.CountyStateAgContactInfo.ContactState END ) END AS [County Contact Name] 
8
12 февр. Cavab 12 fevralda JustJohn tərəfindən verilir. 2016-02-12 00:35 '16 'da 0:35' da 2016-02-12 00:35 'da
  SELECT IIF(Obsolete = 'N' OR InStock = 'Y',1,0) AS Saleable, * FROM Product 
5
30 нояб. cavab SURJEET SINGH Bisht 30 noyabrda verilir . 2016-11-30 14:05 '16 saat 2:05 'da 2016-11-30 14:05

SQL Server 2012 istifadə edənlər üçün IIF, Case ifadələrinə alternativ olaraq əlavə edilmiş və işləyən bir xüsusiyyətdir.

 SELECT IIF(Obsolete = 'N' OR InStock = 'Y', 1, 0) AS Salable, * FROM Product 
3
08 янв. Cavab Dibin Jan 08 verilir 2014-01-08 13:18 '14 at 13:18 2014-01-08 13:18
 SELECT CASE WHEN Obsolete = 'N' or InStock = 'Y' THEN 1 ELSE 0 END AS Saleable, * FROM Product 
2
09 авг. user8422856 tərəfindən verilmiş cavab 09 av . 2017-08-09 00:33 '17 də 0:33 2017-08-09 00:33
 CASE WHEN CAST([PartnerProg Start Date] AS DATE) < CAST('1-Nov-2010' AS DATE) AND CAST([PartnerProg End Date] AS DATE) > CAST('31-Jan-2011' AS DATE) THEN 'Preferred or Gold' ELSE '' END AS 'Partner Segment 2 Q111', 

birdən çox tarixi müqayisə etmək istəyirsinizsə bunu istifadə edin

-3
29 февр. Cavab 29 fevralda Shashidhar Jarung tərəfindən verilir . 2012-02-29 17:37 '12 at 5:37 pm 2012-02-29 17:37

bağlı digər suallar sual