2012-06-08 3 views
1

У меня есть два запроса выбора, и я хочу выбрать значения из обоих и иметь новый запрос. Я попытался присоединиться к ним, но я не получаю информацию, которую хочу.ACCESS 2010: Как выбрать значения из двух запросов?

Первый запрос, что у меня есть, один ниже:

SELECT InWarehouse.expiry_date, 
     drugs.active_substance, 
     drugs.strength, 
     drugs.strength_type, 
     drugs.dosage_form, 
     drugs.minimum_quantity, 
     NZ(SUM(InWarehouse.quantity),0) AS quant 
FROM drugs 
     LEFT JOIN (SELECT drug_id, 
         expiry_date, 
         SUM(in_quant - out_quant) AS quantity 
       FROM warehouse GROUP BY drug_id, expiry_date) 
AS InWarehouse ON 
     InWarehouse.drug_id = drugs.id 
     GROUP BY InWarehouse.expiry_date, 
     drugs.active_substance, 
     drugs.strength, 
     drugs.strength_type, 
     drugs.dosage_form, 
     drugs.minimum_quantity; 

И второе одно:

SELECT InPharmacy.expiry_date, 
     drugs.active_substance, 
     drugs.strength, 
     drugs.strength_type, 
     drugs.dosage_form, 
     drugs.minimum_quantity, 
     NZ(SUM(InPharmacy.quantity), 0) as quant 
FROM (drugs 
LEFT JOIN (SELECT drug_id, expiry_date, SUM(in_quant - out_quant) as quantity 
      FROM pharmacy 
      GROUP BY drug_id, expiry_date) as InPharmacy 
ON InPharmacy.drug_id = drugs.id) 

GROUP BY InPharmacy.expiry_date, 
     drugs.active_substance, 
     drugs.strength, 
     drugs.strength_type, 
     drugs.dosage_form, 
     drugs.minimum_quantity; 

Я хочу получить:

InWarehouse.expiry_date, 
drugs.active_substance, 
drugs.strength, 
drugs.strength_type, 
drugs.dosage_form, 
drugs.minimum_quantity, 
InWarehouse.quantity + InPharmacy.quantity, 
InPharmacy.expiry_date 
GROUP BY InWarehouse.expiry_date = InPharmacy.expiry_date 

Любая помощь пожалуйста?

+0

Можете ли вы объяснить взаимосвязь между таблицей склада, таблицы лекарств и таблицы аптеки? – bendataclear

+0

@bendataclear Да, таблицы аптеки и склада имеют в качестве внешнего ключа значение drug_id. drug.ID является первичным ключом для таблицы лекарств – zinon

ответ

1

Вы можете просто поставить два запроса в подзапросе основного запроса:

SELECT InWarehouse.expiry_date, 
t1.active_substance, 
drugs.strength, 
drugs.strength_type, 
drugs.dosage_form, 
drugs.minimum_quantity, 
InWarehouse.quantity + InPharmacy.quantity, 
InPharmacy.expiry_date 
FROM (SELECT InWarehouse.expiry_date, 
     drugs.active_substance, 
     drugs.strength, 
     drugs.strength_type, 
     drugs.dosage_form, 
     drugs.minimum_quantity, 
     NZ(SUM(InWarehouse.quantity),0) AS quant 
FROM drugs 
     LEFT JOIN (SELECT drug_id, 
         expiry_date, 
         SUM(in_quant - out_quant) AS quantity 
       FROM warehouse GROUP BY drug_id, expiry_date) 
AS InWarehouse ON 
     InWarehouse.drug_id = drugs.id 
     GROUP BY InWarehouse.expiry_date, 
     drugs.active_substance, 
     drugs.strength, 
     drugs.strength_type, 
     drugs.dosage_form, 
     drugs.minimum_quantity 
) t1 
JOIN ( SELECT InPharmacy.expiry_date, 
     drugs.active_substance, 
     drugs.strength, 
     drugs.strength_type, 
     drugs.dosage_form, 
     drugs.minimum_quantity, 
     NZ(SUM(InPharmacy.quantity), 0) as quant 
FROM (drugs 
LEFT JOIN (SELECT drug_id, expiry_date, SUM(in_quant - out_quant) as quantity 
      FROM pharmacy 
      GROUP BY drug_id, expiry_date) as InPharmacy 
ON InPharmacy.drug_id = drugs.id) 

GROUP BY InPharmacy.expiry_date, 
     drugs.active_substance, 
     drugs.strength, 
     drugs.strength_type, 
     drugs.dosage_form, 
     drugs.minimum_quantity) t2 
ON t1.active_substance = t2.active_substance 

Я использовал active_substance поле в качестве ключа для соединения двух таблицы, если не подходит вам, можно выбрать более подходящий набор из столбцов, однако техникой является два поставить два dinstinct запроса в качестве подзапроса основного и JOIN их в надлежащем порядке ...

+0

К сожалению, я не могу выполнить это. Я получаю предупреждающее сообщение «Указанное поле« drugs.active_substance »может ссылаться на более, чем одну таблицу, указанную в предложении FROM вашего оператора SQL. – zinon

+0

Попробуйте с t1.active_substance, как в обновленном ответе. – aleroot

+0

Это нормально, но это просит меня предоставить InWarehouse.quantity и значения InPharmacy.quantity. – zinon

Смежные вопросы