从表返回值时加入case语句

时间:2015-10-12 04:05:46

标签: sql-server tsql

我需要此查询从REPORT表中返回两个值,SUBJECT和ID_NUM。

正常选择主题,但只有在表IMS中将SECRET设置为N时才应选择ID_NUM。

我通常会这样做

join on REPORT.ID_NUM = IMS.IR_ID_NUM

但是在SELECT语句中我不确定在指定WHERE表之前如何在SELECT部分​​执行此操作。

SELECT SUBJECT,

--Check if secret before selecting values
--Secret column is in IMS table, value i want selected is in REPORT
CASE

    WHEN (SECRET = 'N') THEN ID_NUM     
    ELSE 'SECRET' END                                                                                
    AS 'ID_NUM  ',

FROM REPORT

    INNER JOIN IMS ON ID_NUM = IR_ID_NUM
    INNER JOIN IR_SUBJECT ON IR_ID_NUM = SUB_ID_NUM

1 个答案:

答案 0 :(得分:3)

SQL语句的不同子句按逻辑顺序执行:

SELECT ...        // 5.
  FROM ...        // 1.
  JOIN ... ON ...
 WHERE ...        // 2.
 GROUP BY ...     // 3.
HAVING ...        // 4.
 ORDER BY ...     // 6.

按顺序排列:

  1. 所有记录都选择FROM表,应用任何联接ON条件,以及用逗号(,)分隔的交叉连接表。
  2. 根据WHERE条款过滤记录。
  3. 记录为GROUP
  4. 根据HAVING子句过滤分组值。
  5. 结果值为SELECT' d。可以使用FROM子句中列出的所有表中的列,包括JOIN表。
  6. 结果行为ORDER。您甚至可以按计算结果值进行排序。
  7. 因此,CASE子句中的SELECT表达式可以毫无问题地访问SECRETID_NUM

    注意:建议在给出多个表时始终限定列名。如果列名不明确(多个表具有相同名称的列),则需要它,但是您应该对非模糊列名称执行此操作,作为其他人(以及您自己)稍后读取SQL语句的文档。