2017-03-08 1 views
-1

나는 (아래에 나열된) 훌륭한 쿼리를 사용하고 있습니다. 내가 가지고있는 문제는 우리가 두 가지 다른 날에 사건을 겪은 환자를 만났고, 나는 PATNUM에 의해 그룹화했기 때문에 하나만 보여주고있다.여러 열을 사용하여 sql 및 group에서 대소 문자를 구분하는 방법

은 내가 PATNUMSCHDT이 경우마다 서로 다른

예 1을 계산하는 방법을 얻을 수 있습니다 : PATNUM 54321 두 번 계산해야하면서

 PATNUM SCHDT 
     12345  30817 
     12345  30817 
     54321  30817 
     54321  30717 

PATNUM 12345

는 한 번만 계산한다.

SELECT ph.*, pi.*, 
COUNT(DISTINCT CASE WHEN `SERVTYPE` IN ('INPT','INPFOP','INFOBS','IP') AND Complete ='7' THEN pi.PATNUM ELSE NULL END) AS count1, 
COUNT(DISTINCT CASE WHEN `SERVTYPE` IN ('INPT','INPFOP','INFOBS','IP') AND Complete ='8' THEN pi.PATNUM ELSE NULL END) AS count2 
FROM patientinfo as pi 
INNER JOIN physicians as ph ON pi.SURGEON=ph.PName 
WHERE PID NOT IN ('1355','988','767','1289','484','2784') 
GROUP BY SURGEON 
ORDER BY Dept,SURGEON ASC 
+0

대부분의 엔터프라이즈 SQL 엔진에서 오류가 발생합니다. 집계 함수의 일부가 아닌 모든 필드로 그룹화해야합니다. 이것은 mySQL이거나 구문에 의해 비표준 그룹을 지원하는 엔진이어야합니다. patnum과 schdt에 의해 그룹에 추가하면 가까운 수 있지만 여전히 그룹화되지 patentinfo 및 의사의 다른 데이터를 두려워 할 것입니다. – xQbert

답변

1

가 열을 당신이보고 싶어 :

내 카운트 문은 무엇입니까?

다음과 같은 방법으로 그룹을 조정할 수 있습니다 : 다음 때 별칭을 사용, 당신은 당신의 테이블 별칭을 줄려고하는 경우에

  • : 나는 몇 가지 제안을 할 것입니다, 또한

    SELECT 
    ph.pname, 
    ph.specialty, 
    SUM(CASE WHEN complete = 7 THEN 1 ELSE 0 END) count1, 
    SUM(CASE WHEN complete = 8 THEN 1 ELSE 0 END) count2 
    FROM 
    (
        SELECT 
        DISTINCT 
        surgeon, 
        patnum, 
        schdt, 
        complete, 
        servtype 
        FROM patientinfo 
        WHERE complete IN (7,8) 
        AND servtype IN ('INPT','INPFOP','INFOBS','IP') 
        AND pid NOT IN ('1355','988','767','1289','484','2784') 
    ) pisub 
    INNER JOIN physicians ph ON pisub.surgeon = ph.pname 
    GROUP BY ph.pname, ph.specialty 
    ORDER BY ph.pname, ph.specialty; 
    

    쿼리의 모든 열을 참조하십시오. 나는 당신이 어떤 테이블을 가져 왔는지에 대해 추측했다. (예 : dept), 정확하지 않으면 그것을 바꿔야한다.

  • 두 테이블 모두에서 모든 레코드를 선택할 필요는 없다.
  • 선택중인 모든 열이 GROUP BY가 아닌 경우 쿼리가 실행되지 않습니다. I've written about this 일반적으로 오라클 및 SQL하지만 실제로 MySQL에서 나는 그것을 실행하지만 잘못된 결과를 보여줄 것 같아요.
+0

mySQL (및 몇 개의 다른 엔진)은 그룹화되지 않은 필드에서 값을 선택하도록 그룹을 확장합니다. 이것은 디자인에 따라서 기능이므로 잘못된 결과가 아닙니다. 사람은 그것이하는 것과 왜하는 것인지 이해해야합니다. 이는 대부분의 엔터프라이즈 레벨 데이터베이스와 다릅니다. – xQbert

+0

날짜와 외과 의사별로 그룹화하면 각 날짜와 외과 의사에게 줄을 제공하므로 매월 20 명씩 각 외과 의사에게 줄을 둡니다. 나는 그들이 한 많은 사례를 보여주는 외과 의사 한 줄을 찾고 있습니다. 나는 모든 제안에 대해 공개하고 있습니다. –

+0

외과 의사와 사례 수당 한 줄을 원한다면 GROUP BY 외과 의사가되어 외과 의사 만 보여줄 것입니다. 내 대답을 업데이트 할게. – bbrumm

관련 문제