gpt4 book ai didi

sql - 如何将结果集中的单行表示为多行?

转载 作者:行者123 更新时间:2023-11-29 04:31:13 26 4
gpt4 key购买 nike

例如,给定包含这些列的货币汇率表(此处使用 3 个,但在我的情况下大约有 30 个):

  date     | eur | usd | gbp
2010-01-28 | X | Y | Z

如何将它转换为这个(使用最新日期的行):

currency | rate
eur | X
usd | Y
gbp | Z

我提出了这样的查询:

SELECT 'eur' AS currency, eur AS rate FROM rates WHERE date = (SELECT MAX(date) FROM rates)
UNION
SELECT 'usd' AS currency, usd AS rate FROM rates WHERE date = (SELECT MAX(date) FROM rates)
UNION
...

又大又丑。还有其他解决方案吗?

最佳答案

有时最简单的解决方案(如果您想要漂亮的查询)是重新设计架构。最好的解决方案可能是将您的表格更改为:

   date    | currency | rate
-----------+----------+-----
2010-01-28 | eur | X
2010-01-28 | usd | Y
2010-01-28 | gbp | Z

具有合适的日期和货币指标以提高性能。这就是 3NF 中应该的方式,因为速率相互依赖,违反了 3NF 规则:

Every column must depend on the key, the whole key and nothing but the key, so help me Codd.

(我喜欢那首小曲)。另一种选择是提供一个执行相同操作的 View ,然后查询该 View 。对于 DBMS,它的工作并没有减少,但您的查询至少看起来更漂亮了(不过 create view 仍然看起来很丑)。

或者您可以接受一些查询看起来很丑陋的事实,将其记录下来,然后继续:-)

关于sql - 如何将结果集中的单行表示为多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2154385/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com