2017-02-03 1 views
0

У меня очень сложный запрос и попытка дать простой пример одной из подтабликов, с которыми у меня возникают проблемы, если вам нужна дополнительная информация или контекст, пожалуйста дай мне знать.SQL Select on Records, которые соответствуют критериям из другой таблицы

Я поставил файл CSV с некоторыми образцами данных здесь: https://drive.google.com/open?id=0B4xdnV0LFZI1dzE5S29QSFhQSmM

Мы делаем торты, а 99% наших тортов сделаны нами. 1% - это когда у нас есть торт, доставленный нам от субподрядчика, и мы получаем «Получить» и «Аудит».

То, что я хотел сделать, чтобы написать что-то вроде этого:

SELECT 
Cake.Cake 
Instruction.Cake_Instruction_Key 
Steps 

FROM 
Cake 
Join Instruction 
ON Cake.Cake_Key = Instruction.Cake_Key 
JOIN Steps 
ON Instruction.Step_Key = Steps.Step_Key 

WHERE 
MIN(Steps.Step_Key) = 1 

Это терпит неудачу, потому что вы не можете иметь агрегат в ИНЕКЕ.

Желаемые результаты будут:

Cake C 13 Receive 
Cake C 14 Audit 
Cake D 15 Receive 
Cake D 16 Audit 

Заранее спасибо за вашу помощь!

ответ

0

Посмотрите на HAVING ключевое слово: https://msdn.microsoft.com/en-us/library/ms180199.aspx

Он работает более или менее такой же, как ИНЕКЕ, но и для агрегатных функций после предложения GROUP BY.

Остерегайтесь, однако, это может быть медленным. Вы должны попробовать как можно больше фильтровать количество записей в ГДЕ и даже подумать о том, чтобы использовать таблицу темповых данных для агрегирования данных в первую очередь.

0

Что вы говорите является GROUP BY/HAVING положение, поэтому в вашем случае вам нужно будет добавить что-то вроде

GROUP BY Cake.Cake, Instruction.Cake_Instruction_Key, Steps 
HAVING MIN(Steps.Step_Key) = 1 
Смежные вопросы