GVKun编程网logo

TSQL CASE与SELECT语句中的if比较(select case和if的区别)

15

在本文中,您将会了解到关于TSQLCASE与SELECT语句中的if比较的新资讯,同时我们还将为您解释selectcase和if的区别的相关在本文中,我们将带你探索TSQLCASE与SELECT语句中

在本文中,您将会了解到关于TSQL CASE与SELECT语句中的if比较的新资讯,同时我们还将为您解释select case和if的区别的相关在本文中,我们将带你探索TSQL CASE与SELECT语句中的if比较的奥秘,分析select case和if的区别的特点,并给出一些关于mysql select语句中使用函数、MySQL SELECT语句中的存储过程变量、MySQL select语句是CASE还是IF ELSEIF?不确定如何获得结果、Oracle SQL – 帮助在Select语句中使用Case的实用技巧。

本文目录一览:

TSQL CASE与SELECT语句中的if比较(select case和if的区别)

TSQL CASE与SELECT语句中的if比较(select case和if的区别)

我想在SELECT中使用CASE语句。

我从用户表中选择,并且(作为一个属性)我也使用嵌套的SQL:

SELECT 
   registrationDate,(SELECT COUNT(*) FROM Articles WHERE userId = Users.userId) as articleNumber,hobbies,...
FROM USERS

然后我想做一个CASE语句来获取用户的排名(排名取决于articleNumber)。

我这样尝试过:

SELECT 
   registrationDate,(SELECT COUNT(*) FROM Articles WHERE Articles.userId = Users.userId) as articleNumber,ranking =
      CASE
         WHEN articleNumber < 2 THEN 'Ama'
         WHEN articleNumber < 5 THEN 'SemiAma' 
         WHEN articleNumber < 7 THEN 'Good'  
         WHEN articleNumber < 9 THEN 'Better' 
         WHEN articleNumber < 12 THEN 'Best'
         ELSE 'Outstanding'
      END,etc...
FROM USERS

解析不会显示任何错误,但是当我尝试运行它时会出现错误:

消息207,级别16,状态1,过程GetUserList,行XY
无效的列名称“ articleNumber”。

我想,CASE无法“识别”我的嵌套SELECT。

我为自己提供了其他一些解决方案,例如 SQL Server 2008-Case / If
SELECT子句中的语句,
但似乎没有任何效果。

我也没有发现’<’和’>’比较有任何类似的问题。

任何帮助将不胜感激 ;)

mysql select语句中使用函数

mysql select语句中使用函数

实例如下:

创建数据表:

1

2

3

4

5

6

mysql&gt; CREATE TABLE Employee(

    -&gt;     id            int,

    -&gt;     first_name    VARCHAR(15),

    -&gt;     last_name     VARCHAR(15)

    -&gt; );

Query OK, 0 rows affected (0.03 sec)

登录后复制

 

向表中插入数据:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

mysql&gt; insert into Employee(id,first_name, last_name)values (1,''Jason'',''Martin'');

Query OK, 1 row affected (0.00 sec)

 

mysql&gt;

mysql&gt; insert into Employee(id,first_name, last_name)values(2,''Alison'',''Mathews'');

Query OK, 1 row affected (0.00 sec)

 

mysql&gt;

mysql&gt; insert into Employee(id,first_name, last_name)values(3,''James'',''Smith'');

Query OK, 1 row affected (0.00 sec)

 

mysql&gt;

mysql&gt; insert into Employee(id,first_name, last_name)values(4,''Celia'',''Rice'');

Query OK, 1 row affected (0.00 sec)

 

mysql&gt;

mysql&gt; insert into Employee(id,first_name, last_name)values(5,''Robert'',''Black'');

Query OK, 1 row affected (0.00 sec)

 

mysql&gt;

mysql&gt; insert into Employee(id,first_name, last_name)values(6,''Linda'', ''Green'');

Query OK, 1 row affected (0.01 sec)

 

mysql&gt;

mysql&gt; insert into Employee(id,first_name, last_name)values(7,''David'',''Larry'');

Query OK, 1 row affected (0.02 sec)

 

mysql&gt;

mysql&gt; insert into Employee(id,first_name, last_name)values(8,''James'',''Cat'');

Query OK, 1 row affected (0.00 sec)

登录后复制

select语句中使用函数

1

2

3

4

5

6

7

8

9

10

11

12

13

14

mysql&gt; SELECT concat(First_Name, " ",Last_Name) AS Name FROM Employee;

+----------------+

| Name           |

+----------------+

| Jason Martin   |

| Alison Mathews |

| James Smith    |

| Celia Rice     |

| Robert Black   |

| Linda Green    |

| David Larry    |

| James Cat      |

+----------------+

8 rows in set (0.00 sec)

登录后复制

MySQL SELECT语句中的存储过程变量

MySQL SELECT语句中的存储过程变量

如何解决MySQL SELECT语句中的存储过程变量?

更正了一些问题,并添加了一个替代选择-适当删除。

DELIMITER |

CREATE PROCEDURE getNearestCities
(
IN p_cityID INT -- should this be int unsigned ?
)
BEGIN

DECLARE cityLat FLOAT; -- should these be decimals ?
DECLARE cityLng FLOAT;

    -- method 1
    SELECT lat,lng into cityLat, cityLng FROM cities WHERE cities.cityID = p_cityID;

    SELECT 
     b.*, 
     haversine(cityLat,cityLng, b.lat, b.lng) AS dist 
    FROM 
     cities b 
    ORDER BY 
     dist 
    LIMIT 10;

    -- method 2
    SELECT   
      b.*, 
      haversine(a.lat, a.lng, b.lat, b.lng) AS dist
    FROM     
      cities AS a
    JOIN cities AS b on a.cityID = p_cityID
    ORDER BY 
      dist
    LIMIT 10;

END |

delimiter ;

解决方法

我正在尝试创建一个存储过程。这是我到目前为止(不起作用)的内容:

DELIMITER |
CREATE PROCEDURE getNearestCities(IN cityID INT)
    BEGIN
        DECLARE cityLat FLOAT;
        DECLARE cityLng FLOAT;
        SET cityLat = SELECT cities.lat FROM cities WHERE cities.id = cityID;
        SET cityLng = SELECT cities.lng FROM cities WHERE cities.id = cityID;
        SELECT *,HAVERSINE(cityLat,cityLng,cities.lat,cities.lng) AS dist FROM cities ORDER BY dist LIMIT 10;
    END |

HAVERSINE是我创建的可以正常工作的函数。如您所见,我正在尝试从“城市”表中获取城市的ID,然后将cityLat和cityLng设置为该记录的其他值。我显然在这里通过使用SELECTs做错了。

这有可能吗?看来应该如此。任何帮助将不胜感激。

MySQL select语句是CASE还是IF ELSEIF?不确定如何获得结果

MySQL select语句是CASE还是IF ELSEIF?不确定如何获得结果

我有两个桌子。一个拥有制造商信息,并包括他们可以销售的区域。另一个有他们的产品出售。我们必须根据地区来限制产品的可见性。这就像Netflix的系统中的视频只能在任何地方(1),在加拿大(2),在美国(3)都可以观看。

我正在尝试进行查询,以告诉我可以根据制造商表中的设置在哪里查看产品。

例如,在制造商表中,有两个字段称为Exposure_new和Exposure_used,每个字段的值分别为1,2或3,以限制可以看到其新视频或使用过的视频的位置。

添加视频时,不会为它们分配“曝光”值,这是根据当前制造商的Exposure_new或Exposure_used值在将它们添加到我们的索引中时即时进行的。

我要获取的是项目详细信息以及基于其是新的还是二手的以及可以在何处看到的计算值,以及为其所有新的或二手产品分配给制造商的规则/值。
我需要根据每个产品使用此一位数字来有条件地将其显示在列表中。

以下内容不起作用,但是您将了解我正在尝试做的事情。我已经使用CASE语句和以下WRONG IF / ELSEIF语句进行了尝试。

任何调试器的帮助,并指出正确的方向,将不胜感激。

SELECT t2.company_name,t2.expose_new,  // 1,2 or 3t2.expose_used, // 1,2 or 3t1.title,t1.seller,t1.status,  //can be new or used(SELECT IF(status =''New'',  (select expose_new from manufacturers where id = t1.seller),1)ELSEIF(t1.status =''Used'',  (select expose_used from manufacturers where id = t1.seller),1)END IF) as ''expose''FROM `products` t1join manufacturers t2 on t2.id = t1.sellerwhere t1.seller = 4238

这是一个CASE版本,实际上似乎在执行,但无论什么情况发生(在本例中为1),总是会产生第一个值。我不确定我是否可以在每个WHEN语句中使用AND添加另一个测试,但是它不会给出错误,而只会给出错误的结果。

SELECT t2.company_name,t2.expose_new,t2.expose_used,t1.title,t1.status, CASE status   when ''New'' and t2.expose_new = 1 then 1   when ''New'' and t2.expose_new = 2 then 2   when ''New'' and t2.expose_new = 3 then 3   when ''Used'' and t2.expose_used = 1 then 1   when ''Used'' and t2.expose_used = 2 then 2   when ''Used'' and t2.expose_used = 3 then 3END as exposeFROM `products` t1join manufacturers t2 on t2.id = t1.sellerwhere t1.seller = 4238

答案1

小编典典

试试这个查询-

SELECT   t2.company_name,  t2.expose_new,  t2.expose_used,  t1.title,  t1.seller,  t1.status,  CASE status  WHEN ''New'' THEN t2.expose_new  WHEN ''Used'' THEN t2.expose_used  ELSE NULL  END as ''expose''FROM  `products` t1JOIN manufacturers t2  ON    t2.id = t1.sellerWHERE  t1.seller = 4238

Oracle SQL – 帮助在Select语句中使用Case

Oracle SQL – 帮助在Select语句中使用Case

CREATE TABLE student_totalexp2 nologging compress AS
SELECT /*+parallel(a,4)*/ disTINCT a.member_sk,CASE 
         WHEN b.end_date IS NULL THEN 
           SYSDATE - MIN(TO_DATE(b.start_date,''yyyymm''))
         ELSE 
           (MAX(TO_DATE(b.end_date,''yyyymm'')) - MIN(TO_DATE(b.start_date,''yyyymm'')))  
       END as days_experience
  FROM student_schools a 
  JOIN rdorwart.position_rd b ON a.member_sk = b.member_sk 
 WHERE days_experience < 730 
 GROUP BY a.member_sk;

SELECT COUNT(*) 
  FROM student_experience;

知道为什么我一直收到这个错误:错误报告:

sql Error: ORA-00904: “DAYS_EXPERIENCE”: invalid identifier 00904. 00000 – “%s: invalid identifier”
*Cause:
*Action:

解决方法

您不能在WHERE子句中引用别名.要么使用子查询,要么更好地使用整个CASE … END到where子句中.

根据OP的评论更新了查询:

create table student_totalexp2 nologging compress as 
SELECT a.member_sk,SUM(CASE WHEN b.end_date IS NULL
    THEN sysdate 
    ELSE to_date(b.end_date,''yyyymm'') 
  END - to_date(b.start_date,''yyyymm'')) as days_experience
FROM student_schools a INNER JOIN rdorwart.position_rd b 
  ON a.member_sk = b.member_sk 
GROUP BY a.member_sk
HAVING SUM(
  CASE WHEN b.end_date IS NULL
    THEN sysdate 
    ELSE to_date(b.end_date,''yyyymm'')
  ) < 730;
SELECT COUNT(*) FROM student_experience;

今天的关于TSQL CASE与SELECT语句中的if比较select case和if的区别的分享已经结束,谢谢您的关注,如果想了解更多关于mysql select语句中使用函数、MySQL SELECT语句中的存储过程变量、MySQL select语句是CASE还是IF ELSEIF?不确定如何获得结果、Oracle SQL – 帮助在Select语句中使用Case的相关知识,请在本站进行查询。

本文标签: