SQL Server存储过程:问题合并两个查询

时间:2016-11-07 12:35:38

标签: sql sql-server stored-procedures

我希望有人会帮助你解决我遇到的问题。我想将两个查询合并到SQL Server中的一个表中。这是我到达的程序,但是在q2。[Umrli]弹出不会设置数据取决于q1。[Naziv Ustanove]

ALTER PROCEDURE [dbo].[test]
AS
BEGIN
    SELECT 
        q1.[Naziv ustanove], q1.[Broj lica], q1.[Broj dana lezanja], q2.Umrli
    FROM 
        (SELECT 
             i_bolnica.naziv AS [Naziv ustanove], 
             COUNT (bolnickiracunSve.id) AS [Broj lica], 
             SUM(bolnickiracunSve.br_dana_lezanja) AS [Broj dana lezanja]
         FROM 
             i_bolnica 
         INNER JOIN 
             bolnickiracunSve ON i_bolnica.id = bolnickiracunSve.id_bolnica
         WHERE 
             bolnickiracunSve.id_bolnica < 91 
             AND bolnickiracunSve.id_odeljenje_otpust NOT IN (800,801,802) 
             AND bolnickiracunSve.id_drzavljanstvo IN (688)
             AND dbo.GrupeBolesti(bolnickiracunSve.id_osnovni_uzrok_hospitalizacije) NOT IN ('z%') 
         GROUP BY 
             i_bolnica.naziv)q1
    CROSS JOIN 
        (SELECT 
             i_bolnica.naziv AS [Naziv ustanove], 
             COUNT (bolnickiracunSve.id) AS [Umrli] 
         FROM 
             i_bolnica 
         INNER JOIN 
             bolnickiracunSve ON i_bolnica.id = bolnickiracunSve.id_bolnica
         WHERE 
             bolnickiracunSve.id_bolnica < 91 
             AND bolnickiracunSve.id_odeljenje_otpust NOT IN (800, 801, 802) 
             AND bolnickiracunSve.id_drzavljanstvo IN (688)
             AND dbo.GrupeBolesti(bolnickiracunSve.id_osnovni_uzrok_hospitalizacije) NOT IN ('z%') 
             AND bolnickiracunSve.id_vrsta_otpusta = '6'
         GROUP BY 
             i_bolnica.naziv)q2
END

1 个答案:

答案 0 :(得分:1)

如果我正确地遵循了这个,除了where子句之外,两个子查询是相同的。如果是,请使用条件聚合:

SELECT b.naziv AS [Naziv ustanove], 
       COUNT(s.id) AS [Broj lica], 
        SUM(s.br_dana_lezanja) AS [Broj dana lezanja],
       SUM(CASE WHEN s.id_vrsta_otpusta = '6' THEN 1 ELSE 0 END)
FROM i_bolnica b INNER JOIN 
     bolnickiracunSve s
     ON b.id = s.id_bolnica
WHERE s.id_bolnica < 91 AND
      s.id_odeljenje_otpust NOT IN (800, 801, 802) AND
      s.id_drzavljanstvo IN (688) AND
      dbo.GrupeBolesti(s.id_osnovni_uzrok_hospitalizacije) NOT IN ('z%') 
GROUP BY b.naziv;

请注意,表别名使查询更易于编写和阅读。