2014-05-09 3 views
1

나는 일이 함께 놀았 던 존재하지 않는, 뭔가 가지고 올 수없는 것 각 ​​그룹에 대해 별도의 행을 얻을.는 날짜가

select 
    v.emp_name as Name 
    ,MONTH(v.YearMonth) as m 
    ,v.SalesTotal as Amount 
from SalesTotals 

나에게 결과를 제공합니다 :이 쿼리를 가지고 내가 매달 NULL 값을 얻을 수 있도록 내가하는이 가입 또는 뭔가 사용하기 만하면 무엇

Name   m   Amount 
Smith  1   123.50 
Smith  2   40.21 
Smith  3   444.21 
Smith  4   23.21 
Jones  1   121.00 
Jones  2   499.00 
Jones  3   23.23 
Jones  4   41.82 
etc.... 

(1 12), 각 이름에 대한 :

Name   m   Amount 
Smith  1   123.50 
Smith  2   40.21 
Smith  3   444.21 
Smith  4   23.21 
Smith  5   NULL 
Smith  6   NULL 
Smith  ...   NULL 
Smith  12   NULL 
Jones  1   121.00 
Jones  2   499.00 
Jones  3   23.23 
Jones  4   41.82 
Jones  5   NULL 
Jones  ...   NULL 
Jones  12   NULL 
etc.... 

나는 "숫자"테이블이 있고, 일을 시도 :

select 
    v.emp_name as Name 
    ,MONTH(v.YearMonth) as m 
    ,v.SalesTotal as Amount 
from SalesTotals 
    FULL JOIN Number n on n.Number = MONTH(v.YearMonth) and n in(1,2,3,4,5,6,7,8,9,10,11,12) 

그러나는 나에게 내가 원하는 것은 실제로 이름의 각 그룹에 대한 6 NULL 행 6 개 추가 NULL 행을 제공합니다. 나는 그룹으로 사용하여 시도하지만, 그런 가입 성명에서 그것을 사용하는 방법을 잘, 그리고이 취할 수있는 올바른 경로가 있는지조차 확실하지했습니다.

어떤 조언이나 방향은 많이 감사합니다!

답변

1

여기 그것을하는 하나 개의 방법 :

  • select 
        s.emp_name as Name 
        ,s.Number as m 
        ,st.salestotal as Amount 
    from (
        select distinct emp_name, number 
        from salestotals, numbers 
        where number between 1 and 12) s left join salestotals st on 
        s.emp_name = st.emp_name and s.number = month(st.yearmonth) 
    
    Condensed SQL Fiddle
+0

남자, 즉 스마트 미쳤다. 잘 했어. 감사! – russds

0

당신은 할 수 :

SELECT EN.emp_name Name, 
     N.Number M, 
     ST.SalesTotal Amount 
FROM ( SELECT Number 
     FROM NumberTable 
     WHERE Number BETWEEN 1 AND 12) N 
CROSS JOIN (SELECT DISTINCT emp_name 
      FROM SalesTotals) EN 
LEFT JOIN SalesTotals ST 
    ON N.Number = MONTH(ST.YearMonth) 
    AND EN.emp_name = ST.emp_name