首页 > 解决方案 > 按顺序、重复和全部返回 SQL 表。

问题描述

这似乎是一个关于 SQL 的微不足道的问题,但却让我沮丧了好几天。假设我有一个我试图提取的关于汇率的 SQL 表。我试图通过的查询是:

SELECT AsAtDate, FromCurrencyCode, ToCurrencyCode, Value 
from tblFX
where FromCurrencyCode = 'USD'
and ToCurrencyCode in ('HKD', 'HKD', 'EUR', 'HKD', 'GBP','EUR')
and AsAtDate = '2018-04-24'

我希望将结果作为一个表,其顺序与我传入的ToCurrencyCode完全相同。但是,默认情况下 SQL 总是返回不同的值。

SQL table output: 
AsAtDate    FromCurrencyCode    ToCurrencyCode  Value
2018-04-24        USD                 EUR      0.818699
2018-04-24        USD                 GBP      0.716101
2018-04-24        USD                 HKD      7.846950

有一些解决方案只返回 SQL 中的重复项,但我想要的是表按照我传入的列表的确切顺序返回,包括唯一字段和重复字段。有没有办法在 SQL 中做到这一点?多谢你们。

Desired SQL table output: 
AsAtDate    FromCurrencyCode    ToCurrencyCode  Value
2018-04-24        USD               HKD         7.846950
2018-04-24        USD               HKD         7.846950
2018-04-24        USD               EUR         0.818699
2018-04-24        USD               HKD         7.846950
2018-04-24        USD               GBP         0.716101
2018-04-24        USD               EUR         0.818699

标签: sqllistduplicatesdistinctsequence

解决方案


嗯...数据库不是 Excel 工作表。让我开导:

  • SQL 标准定义了IN运算符的作用:它是一个“集合运算符”,如果元素属于集合,则返回 true。现在,在集合中多次包含相同的值不会做任何额外的事情。在内部,数据库将立即删除重复的。
  • 默认情况下, SQL 指定SELECT不以任何特定顺序返回行。如果您需要特定订单,则需要使用ORDER BY. 你不能问这样的问题:“请按照插入时完全相同的顺序返回行”。不,我很抱歉,但这不是 SQL。

要获得您想要的结果,您需要从数据库中获取裸行并您的应用程序中对它们进行处理以使其看起来像您想要的那样。


推荐阅读