在一个查询中组合两个表的结果

时间:2011-08-11 05:38:24

标签: sql sql-server sql-server-2008 stored-procedures

我有一个查询

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 :(得分:0)

DBMS的工作不是按照您希望的方式格式化数据,而是应用程序的语言。因此,使用您发布的第一个查询查询数据库,并使用您正在使用的任何语言按照您希望的方式对其进行格式化。

如果要与另一个表进行JOIN,则必须指定条件。如果您只想制作笛卡儿产品,可以使用CROSS JOIN:

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

答案 1 :(得分:0)

第一个回答:

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/

现在加入你的药物治疗表应该是微不足道的。

select * from Medication m 
join (result from previous query) t on t.CategoryId=m.CategoryID