2016-11-07 77 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)。 –