【问题标题】:SQL Query with case statements带有 case 语句的 SQL 查询
【发布时间】:2023-02-21 03:57:30
【问题描述】:

我有一个电话表,其中包含三个字段。字段名称是“Person_Name”、“Phone_Type”和“Phone_Number”。在此表中,多个人拥有三个电话号码及其电话类型。例如,John 的电话类型为“P”(永久)、“PC”(个人手机)和“F”(“传真”)。

我想拉的是,如果个人手机不可用,请向我显示所有不同人员的电话号码,然后向我显示永久号码,如果永久号码丢失,则在一次查询中向我显示传真号码。

感谢您对此的帮助。

我的想法用完了

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:
    SELECT Person_Name, 
           COALESCE(
             (SELECT Phone_Number FROM phone WHERE Person_Name = p.Person_Name AND Phone_Type = 'PC'),
             (SELECT Phone_Number FROM phone WHERE Person_Name = p.Person_Name AND Phone_Type = 'P'),
             (SELECT Phone_Number FROM phone WHERE Person_Name = p.Person_Name AND Phone_Type = 'F')
           ) AS Phone_Number
    FROM (
      SELECT DISTINCT Person_Name
      FROM phone
    ) p;
    

    让我们分解一下:

    最里面的子查询从电话表中选择所有不同的人名。 查询的中间部分使用 COALESCE 返回三个子查询中的第一个非空值。子查询查找具有指定电话类型的给定人员的电话号码,顺序为 Personal Cell、Permanent 和 Fax。如果个人手机号码不可用,则查询返回到永久号码,如果该号码也不可用,则查询返回到传真号码。 最外层的查询选择由前一个子查询生成的 Person_Name 和 Phone_Number 列。 此查询应返回一个表,每个人一行,并根据个人手机、永久和传真的优先顺序返回相应的电话号码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-13
      • 2020-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-15
      相关资源
      最近更新 更多