我希望有人会帮助你解决我遇到的问题。我想将两个查询合并到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
答案 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;
请注意,表别名使查询更易于编写和阅读。