복붙노트

[SQL] 두 개의 SELECT 문 결과를 가입

SQL

두 개의 SELECT 문 결과를 가입

그것은 하나 개의 문장에 2 SQL SELECT 문의 결과에 가입 할 수 있습니까? 나는 마감 시간에 각 레코드는 별도의 작업은 작업의 데이터베이스가 (그리고 시작부터 마감 일의 단지 INT 인 PALT을. 나이는 일의 INT 번호도 있습니다.)

나는 테이블의 각 사람, 그들이 가지고있는 작업의 수, 그리고 그들이 가지고 LATE 작업의 수를 가진 테이블을 갖고 싶어 (있는 경우).

나는 그렇게처럼 쉽게 별도의 테이블에있는 데이터를 얻을 수 있습니다 :

SELECT ks, COUNT(*) AS '# Tasks' FROM Table GROUP BY ks

데이터를 같이 반환 :

ks        # Tasks
person1   7
person2   3

그리고 내가 가진 :

SELECT ks, COUNT(*) AS '# Late' FROM Table WHERE Age > Palt GROUP BY ks

이는 반환 :

ks        # Late
person1   1
person2   1

그리고합니다 (KS에 의해)이 두 SELECT 문의 결과에 가입 할

나는 임시 테이블을 사용하지 않도록하기 위해 노력하고있어,하지만이 작업을 수행 할 수있는 유일한 실용적인 방법이라면, 좀 더 이런 식으로 임시 테이블을 사용하는 방법에 대해 알고 싶습니다.

또한 조건부 충족시키는 행 수를 어떤 종류의 ()를하려고 노력하지만, 나도 그렇게하는 방법을 알아낼 수 없었다. 그것이 가능하다면, 그 역시 작동합니다.

추가: 죄송합니다, 나는 나의 결과는 KS, 작업 및 후기에 열을 갖고 싶어

KS        # Tasks   # Late
person1   7         1
person2   3         1
person3   2         0  (or null)

또한, 나는 사람이 그들이 더 늦게 작업을 수행하지 못할 경우에도 표시하고 싶습니다.

SUM (CASE WHEN 시대> Palt THEN 1 ELSE 0 END) 늦은 이 대답을 잘 덕분에 작품!

왼쪽을 사용하여도 일 두 SELECT 문은 또한 작동을 가입 가입, 나는 이런 식으로 다수의 선택에 가입하는 방법을 이제 이해

해결법

  1. ==============================

    1.

    SELECT t1.ks, t1.[# Tasks], COALESCE(t2.[# Late], 0) AS [# Late]
    FROM 
        (SELECT ks, COUNT(*) AS '# Tasks' FROM Table GROUP BY ks) t1
    LEFT JOIN
        (SELECT ks, COUNT(*) AS '# Late' FROM Table WHERE Age > Palt GROUP BY ks) t2
    ON (t1.ks = t2.ks);
    
  2. ==============================

    2.이 같은 시도 :

    이 같은 시도 :

    SELECT 
    * 
    FROM
    (SELECT ks, COUNT(*) AS '# Tasks' FROM Table GROUP BY ks) t1 
    INNER JOIN
    (SELECT ks, COUNT(*) AS '# Late' FROM Table WHERE Age > Palt GROUP BY ks) t2
    ON t1.ks = t2.ks
    
  3. ==============================

    3.사용 UNION :

    사용 UNION :

    SELECT ks, COUNT(*) AS '# Tasks' FROM Table GROUP BY ks
    UNION
    SELECT ks, COUNT(*) AS '# Late' FROM Table WHERE Age > Palt GROUP BY ks
    

    또는 UNION ALL은 중복을 원하는 경우 :

    SELECT ks, COUNT(*) AS '# Tasks' FROM Table GROUP BY ks
    UNION ALL
    SELECT ks, COUNT(*) AS '# Late' FROM Table WHERE Age > Palt GROUP BY ks
    
  4. ==============================

    4.당신은이에 대한 UNION ALL 키워드를 사용할 수 있습니다.

    당신은이에 대한 UNION ALL 키워드를 사용할 수 있습니다.

    여기에 T-SQL http://msdn.microsoft.com/en-us/library/ms180026.aspx에서 그것을 할 수있는 MSDN의 문서입니다

    UNION ALL은 - 결과 집합을 결합

    셋트 연합과 나던 출력 중복 값과 같은 UNION-합니까 뭔가

    예와 차이 : http://sql-plsql.blogspot.in/2010/05/difference-between-union-union-all.html

  5. ==============================

    5.나이와 Palt가 열이 같은 테이블에있는 경우, 당신은 COUNT (*) 모든 작업을이 같은 말에야 것들을 요약 할 수 있습니다 :

    나이와 Palt가 열이 같은 테이블에있는 경우, 당신은 COUNT (*) 모든 작업을이 같은 말에야 것들을 요약 할 수 있습니다 :

    select ks,
           count(*) tasks,
           sum(case when Age > Palt then 1 end) late
      from Table
     group by ks
    
  6. from https://stackoverflow.com/questions/10538539/join-two-select-statement-results by cc-by-sa and MIT license