Поиск SQL-запросов с оператором IN - PullRequest
0 голосов
/ 12 декабря 2018

Периодически я получаю запросы на работе, спрашивающие, могу ли я сообщить заказчику, получили ли определенные магазины в нашей компании определенное количество определенного номера товара.У меня есть запрос, который легко позволит мне добавить в список более 500 номеров товаров и выплюнуть магазины, в которых (например) более 100 товаров.Проблема заключается в том, что мне нужно собрать данные обратно в файл Excel и преобразовать их с помощью vlookup для магазинов, чтобы получить окончательный ответ.Может кто-нибудь сказать мне, какую функцию мне нужно будет использовать в выпадающем списке упорядоченных магазинов и номеров товаров, чтобы проверить наличие определенных комбинаций?
Например, в одной строке таблицы я хочу увидеть, получило ли магазин 100 больше, чем5 из пункта 1234. У меня есть 500 и более строк пар, которые я хочу запросить для количества «больше 5».Никогда не будет неуникальных комбинаций Store и Item Number.Каждый ряд отличается.

Пример:
Магазин |ItemNumber
1 |1234
2 |4567
1 |4567

РЕДАКТИРОВАТЬ: Моя компания предоставила мне доступ только к данным только для чтения, поэтому я не уверен, можно ли мне использовать временные переменные и таблицы.

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

SQL SERVER, вы можете использовать values для генерации производной таблицы и просто присоединиться

SELECT *
FROM (VALUES (1,1234),(2,4567)(1,4567)) AS Filter(Store,Item)
INNER JOIN (yourQuery) B
 on Filter.Store = B.Store
and Filter.Item = B.Item
WHERE B.QTY > 5

Это также можно сделать с помощью объединения all и подзапроса и присоединения

Некоторые СУБДподдерживать комплекс in:

where (Store, item) in ((1,1234),(2,4567),(1,4567)) and  QTY > 5
0 голосов
/ 12 декабря 2018

Вы можете построить сложное where условие:

select t.*
from t
where (store = 1 and item = 1234 and quantity >= 5) or
      (store = 2 and item = 567 and quantity >= 10) or
      . . . 

РЕДАКТИРОВАТЬ:

Понятно.Ваша структура данных - это данные, которые вы хотите передать. Если это только в приложении, вы можете создать запрос, например:

select t.*
from t
where (store = 1 and item = 1234 and quantity >= 5) or
      (store = 2 and item = 567 and quantity >= 5) or
      . . . ;

В некоторых базах данных используются кортежи, позволяющие:

select t.*
from t
where (store, item) in ((1, 1234) (2, 567), . . . ) and
      quantity >= 5;

Или, если пары магазин / предмет уже есть в базе данных:

select t.*
from t join
     storeitems si
     on t.store = si.store and t.item = si.item
where t.quantity >= 5;
...