#sql #sql-server
#sql #sql-сервер
Вопрос:
У меня есть один мастер ItemMaster главной таблицы. Он содержит все уникальные записи. У меня есть другая таблица ItemOrder, в которой элементы имеют несколько вхождений. Теперь я хочу получать один и тот же элемент столько раз, сколько я вызываю его в инструкции IN (идентификаторы элементов автоматически генерируются кодом).
Пример —
Столбцы ItemMaster — ItemId, ItemCode, ItemName, Description и т. Д…
Столбцы ItemOrder — ItemId, ItemFinish и т.д…
Я использую —
SELECT ItemId, ItemCode FROM ItemMaster WHERE ItemId IN (10, 20, 30, 40, 10, 50, 20,...);
Я хочу, чтобы результирующий набор дважды содержал элемент # 10 ИЛИ 20. Этот оператор IN генерируется автоматически. Элементы одинаковы, но отличаются в зависимости от их завершения!
Буду признателен. Спасибо!
…
Комментарии:
1. Выполните соединение вместо IN .
2. Не могли бы вы указать или дать код?
3. Вы не можете ПРОСТО использовать in; это только сейчас, как работает «In».. In просто возвращает все значения В списке независимо от того, сколько раз это происходит. Допустим, в ваших данных содержится 7 «20». Какие 2 из 7 «20-х» вы бы хотели? Перекрестное применение и top можно использовать для ограничения всех записей, возвращаемых для каждого элемента, не более чем максимальным; курсор можно использовать для анализа каждого по отдельности и перебора каждого значения вместо использования In . Но, насколько мне известно, вы не можете ограничить возвращаемые записи количеством вхождений значения в инструкции In.
4. Пожалуйста, предоставьте образцы данных и желаемые результаты.
5. Пожалуйста, посетите anchulgupta.com/sql.PNG . Результирующий набор показывает единичные вхождения, скажем, 45, тогда как я хочу, чтобы он появлялся дважды.
Ответ №1:
Вы можете использовать join
:
SELECT v.ItemId, m.ItemCode
FROM (VALUES (10), (20), (30), (40), (20), . . .
) v(ItemId) JOIN
ItemMaster im
ON im.ItemId = v.ItemId;
Примечание: если вы также хотите сохранить несоответствие itemids
, тогда используйте LEFT JOIN
.
Комментарии:
1. Может быть, я что-то упускаю: но я думаю, что он после ограничения данных возвращает идентификатор элемента «20» только дважды из ItemOrder (среди других значений в in). Я
itemOrder
здесь вообще ничего не вижу. и только дважды, даже если в нем 5 вхождений «20», поскольку вIn
инструкции только 20 перечислены дважды. Я был заинтригован, хотя я думал, что изучаю что-то новое; и, возможно, я все еще собираюсь! : P ~~2. Таблица ItemOrder содержит несколько заказов разных клиентов. Клиент может заказать один и тот же товар дважды или трижды и т. Д. На основе разных цветов отделки. Итак, это сценарий. Вы также можете предложить любой другой запрос. У меня просто есть серия ItemId, возвращенных из кода.