Объединение результатов двух таблиц в одном запросе - PullRequest
0 голосов
/ 11 августа 2011

У меня есть запрос

select* from MedicationCombination mc
where mc.MedicationId = 2

И результат запроса:

Name        Dosage
-----       ------
Med1        12
Med2        14
Med3        16

Я хочу поместить этот запрос в хранимую процедуру, которая будет принимать MedicationId в качестве параметра и возвращать результат как:

Name                 Dosage
----                 ------
Med1/Med2/Med3      12/14/16

Я хочу использовать этот SP в другом запросе:

select Id, Category 
from Medication

Результат:

Id      Category
--      --------
1       Psychotropic

Я хочу использовать SP в приведенном выше запросе, чтобы результат был следующим:

Id  Category         Name                Dosage
--  --------         ----                ------
1   Psychotropic    Med1/Med2/Med3      12/14/16

Какими могут быть возможные решения?

Ответы [ 2 ]

0 голосов
/ 11 августа 2011

Первый ответ:

SELECT DISTINCT @YourMedicationID AS CategoryId
        ( SELECT    ( Name + '/' )
          FROM      MedicationCombination p
          WHERE     p.MedicationId = p2.MedicationId
          ORDER BY  Name
        FOR
          XML PATH('')
        ) AS NAME ,
        ( SELECT    ( CAST(Dosage AS VARCHAR(10)) + '/' )
          FROM      MedicationCombination p
          WHERE     p.MedicationId = p2.MedicationId
          ORDER BY  Name
        FOR
          XML PATH('')
        ) AS Dosage
FROM    MedicationCombination p2
WHERE   p2.MedicationId = @YourMedicationID
GROUP BY NAME ,
        MedicationId

Производит это:

CategoryId     NAME              Dosage

2              Med1/Med2/Med3/   12/14/16/

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

0 голосов
/ 11 августа 2011

Работа вашей СУБД заключается не в том, чтобы отформатировать данные так, как вы хотели бы, чтобы они выглядели, а в языке приложения.Поэтому выполните запрос к своей базе данных первым отправленным запросом и используйте любой язык, который вы используете, чтобы отформатировать его так, как вы хотите.

Если вы хотите СОЕДИНИТЬСЯ с другой таблицей, вы должны указать условия.Если вы просто хотите сделать декартово произведение, вы можете использовать CROSS JOIN:

SELECT Id, Category, Name, Dosage
FROM MedicationCombination
CROSS JOIN Medication
WHERE MedicationId = 2
...