2016-11-07 82 views
2

我希望有人会帮助你解决我遇到的问题。我想将两个查询合并到SQL Server中的一个表中。这是我的程序,我到了,但在第二季度。[Umrli]弹出不设置数据是依赖于第一季度。[Naziv Ustanove]SQL Server存储过程:问题合并两个查询

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

如果我按照这个正确,两个子查询,除了相同为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; 

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

+0

谢谢戈登这是解决方案和答案,我想看看,在我的情况下,这个问题是关闭:) –

+1

@ZdravkoLukic如果这回答你的问题,请检查答案旁边的复选标记(✔)。在这里阅读更多关于这个礼节的信息:[当有人回答我的问题时我应该怎么做?](https://stackoverflow.com/help/someone-answers)。 –