如何在纯 SQL 中转换查询结果以获得更好的可读性

Posted

技术标签:

【中文标题】如何在纯 SQL 中转换查询结果以获得更好的可读性【英文标题】:How to transform query results for a better readability in pure SQL 【发布时间】:2019-09-30 13:19:58 【问题描述】:

在数据库中,我有一列带有代码编号(1 到 3)。每个数字对应一个状态(例如 PATCHED = 1 - NOTPATCHED = 2 - NOTAPPLICABLE = 3)。这些状态已记录在案,但未存储。

当我提出一个简单的请求时

SELECT UID, STATES FROM COMPUTERS

它返回类似的东西

0001   1
0002   1
0003   3
0004   2
...

在纯 SQL 中有没有办法用它们的含义来替换状态,以获得具有更好可读性的东西,例如:

0001   PATCHED 
0002   PATCHED 
0003   NOTAPPLICABLE 
0004   NOTPATCHED 
...

我想再次指出,状态意义没有被存储,也不能被存储。

非常感谢您的帮助。

威廉

【问题讨论】:

code numberstate-description 的映射在哪里?如果这也在数据库中,那将是最好的,否则您将不得不维护映射两次... 【参考方案1】:

这可以通过CASE 表达式轻松完成:

SELECT 
  UID, 
  CASE STATES 
    WHEN 1 THEN 'PATCHED'
    WHEN 2 THEN 'NOTPATCHED'
    WHEN 3 THEN 'NOTAPPLICABLE'
  END AS States_new
FROM COMPUTERS

【讨论】:

不要认为这是一个好主意,除非没有办法在数据库中维护映射 code number - state,因为当映射更改时您必须更改查询任何方式(例如新州)... 原帖说"I would like to point out again that states meaning are not stored and can't be." 好的,但是尽管存储在数据库中,但可能有一种方法可以在应用程序和数据库之间共享信息,这会更好。顺便说一句:我没有投反对票或其他任何事情,因为这是给出数据的唯一解决方案 - 但我想声明,考虑到未来的维护,这绝对不是你想要的。 我 100% 同意你的看法 :)

以上是关于如何在纯 SQL 中转换查询结果以获得更好的可读性的主要内容,如果未能解决你的问题,请参考以下文章

如何优化我的实体框架查询以获得更好的性能和更高的可读性

如何编写此查询以在 Sql Server 中获得更好的性能?删除子字符串行

如何将子查询转换为连接以获得快速结果?

如何使用 SQLab Xpert Tuning 来调整 SQL 以获得更好的性能?

对于 HIVE 查询,Is OR 提供比 IN 更好的性能

如何使用 3 个表在 SQL 查询中获得完整结果,其中 1 个表保持 2 个表的关系?