Вернуть таблицу SQL в последовательности, дубликаты и все. - PullRequest
0 голосов
/ 25 апреля 2018

Это, казалось бы, тривиальный вопрос по 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

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Хм ... База данных не является листом Excel. Позвольте мне просветить:

  • Стандарт SQL определяет, что делает оператор IN: это «оператор множества», который возвращает true, если элемент принадлежит множеству. Теперь, включение одного и того же значения несколько раз в набор не делает ничего лишнего. Внутренне база данных сразу удалит дубликаты.
  • SQL указывает, что SELECT не возвращает строки в каком-либо определенном порядке по умолчанию. Если вам нужен конкретный заказ, вам нужно указать его, используя ORDER BY. Вы не можете задать что-то вроде: «Пожалуйста, верните строки в том же порядке, в котором они были вставлены». Нет, извините, но это не SQL.

Чтобы получить желаемый результат, вам нужно получить пустые строки из базы данных и массировать их в своем приложении, чтобы они выглядели так, как вы хотите.

0 голосов
/ 25 апреля 2018

Сначала необходимо узнать, допускает ли ваша таблица дубликаты относительно столбцов, которые вы извлекаете (AsAtDate, FromCurrencyCode, ToCurrencyCode и Value). Но из-за цели таблицы, в которой хранится курс валюты каждой даты, первые три столбца фактически соответствуют первичному ключу таблицы, поэтому дубликаты не допускаются при их возврате.

Таким образом, в вашем сценарии невозможно вернуть дубликаты.

...