Получить несколько выходов в одном SQL-заявлении [дубликат]

Убедитесь, что вы не закрываете базу данных. Используя db_close () перед запуском вашего запроса:

Если вы используете несколько запросов в скрипте, даже если вы включая другие страницы, содержащие запросы или соединение с базой данных, возможно, что в любом месте вы будете использовать db_close (), который закроет ваше соединение с базой данных, поэтому убедитесь, что вы не делаете эту ошибку в своих сценариях.

-1
задан user3333155 15 October 2015 в 02:50
поделиться

5 ответов

Мне любопытно узнать о вашей ошибке. это поможет другим дать вам точное решение. Ваш запрос в порядке, он должен возвращать много строк, поскольку вы выполняете перекрестное соединение, поэтому, если сначала из части [( SELECT COUNT(DAY_IN) AS arr FROM t_hospital WHERE DAY_IN between @start_check and @finish_check and RES_DATE between @start_res and @finish_res and ID_daily_hos =@daily_hos group by DAY_IN )e,] возвращается 4, и позволяет сказать, что другие возвращают 3,5,6, тогда вы получите 4 * 5 * 6 * 3 = 360 строки, и я думаю, вы этого не хотите. чтобы получить точный ответ, запустите каждую часть запроса select на экране печати phpmyAdmin / sqlyog и вставьте его в SO с тем, что вы хотите.

0
ответ дан Atiqur 4 September 2018 в 06:59
поделиться

Это довольно распространенный шаблон:

SELECT DAY_IN, COUNT(*) AS arr,
        SUM(IF(PAT_STATUS  like '%ong%', 1, 0)) AS ONG1,
        SUM(IF(PAT_STATUS  like '%rtde%', 1, 0)) AS RTED,
        SUM(IF(PAT_STATUS  like '%pol%', 1, 0)) AS POL1,
        SUM(IF(PAT_STATUS  like '%para%', 1, 0)) AS para
FROM t_hospital 
WHERE DAY_IN between @start_check and @finish_check 
    and RES_DATE between @start_res and @finish_res  
    and ID_daily_hos =@daily_hos
GROUP BY DAY_IN
2
ответ дан Barmar 4 September 2018 в 06:59
поделиться

Если я понимаю вас правильно, вот что вы хотите.

SET @start_res = 20150301;
SET @finish_res= 20150501;
SET @finish_check= 20150801;
SET @start_check= 20150301;
SET @daily_hos= 3;

SELECT 

(SELECT COUNT(DAY_IN) FROM t_hospital WHERE 
DAY_IN between  @start_check and @finish_check and 
RES_DATE between @start_res and @finish_res and 
ID_daily_hos =@daily_hos) AS 'arr' ,

(SELECT COUNT(PAT_STATUS) FROM t_hospital WHERE 
PAT_STATUS  like '%ong%' and  
DAY_IN between @start_check and @finish_check and 
RES_DATE between @start_res and @finish_res  and 
ID_daily_hos =@daily_hos) AS 'ONG1' ,

(SELECT COUNT(PAT_STATUS) FROM t_hospital WHERE 
PAT_STATUS  like '%rtde%' and  
DAY_IN between  @start_check and @finish_check and 
RES_DATE between @start_res and @finish_res  and 
ID_daily_hos =@daily_hos) AS 'RTED' ,

(SELECT COUNT(PAT_STATUS) FROM t_hospital WHERE 
PAT_STATUS  like '%pol%' and 
DAY_IN between @start_check and @finish_check and 
RES_DATE between @start_res and @finish_res  and 
ID_daily_hos =@daily_hos) AS 'POLI' ,

(SELECT COUNT(PAT_STATUS) FROM t_hospital WHERE 
PAT_STATUS  like '%para%' and  
DAY_IN between @start_check and @finish_check and 
RES_DATE between @start_res and @finish_res  and 
ID_daily_hos =@daily_hos) AS 'para'
0
ответ дан japzdivino 4 September 2018 в 06:59
поделиться

В SQL Server 2005+ вы можете использовать функции Window. Но он не поддерживается в MySQL.

В подзапросе, выбор операторов должен иметь оператор объединения. Например:

SELECT * FROM (
    (SELECT COUNT(..) ...) AS C1
       INNER JOIN (SELECT COUNT(...) ...) AS C2
            ON <condition>
       INNER JOIN ... )
0
ответ дан Nguyễn Hải Triều 4 September 2018 в 06:59
поделиться

Попробуйте следующее: -

SET @start_res = 20150301;
SET @finish_res= 20150501;
SET @finish_check= 20150801;
SET @start_check= 20150301;
SET @daily_hos= 3;

SELECT 

(SELECT COUNT(DAY_IN) AS arr FROM t_hospital WHERE 
DAY_IN between  @start_check and @finish_check and 
RES_DATE between @start_res and @finish_res and 
ID_daily_hos =@daily_hos) e,

(SELECT COUNT(PAT_STATUS) AS ONG1 FROM t_hospital WHERE 
PAT_STATUS  like '%ong%' and  
DAY_IN between @start_check and @finish_check and 
RES_DATE between @start_res and @finish_res  and 
ID_daily_hos =@daily_hos) a,

(SELECT COUNT(PAT_STATUS) AS RTED FROM t_hospital WHERE 
PAT_STATUS  like '%rtde%' and  
DAY_IN between  @start_check and @finish_check and 
RES_DATE between @start_res and @finish_res  and 
ID_daily_hos =@daily_hos)b,

(SELECT COUNT(PAT_STATUS) AS POLI FROM t_hospital WHERE 
PAT_STATUS  like '%pol%' and 
DAY_IN between @start_check and @finish_check and 
RES_DATE between @start_res and @finish_res  and 
ID_daily_hos =@daily_hos) c,

(SELECT COUNT(PAT_STATUS) AS para FROM t_hospital WHERE 
PAT_STATUS  like '%para%' and  
DAY_IN between @start_check and @finish_check and 
RES_DATE between @start_res and @finish_res  and 
ID_daily_hos =@daily_hos) d

В вашем вопросе упоминается о соединении двух таблиц, но, похоже, имеется только t_hospital. Возможно, вы захотите обновить свой вопрос информацией о другой таблице.

0
ответ дан zedfoxus 4 September 2018 в 06:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: