2016-10-31 1 views
0

은 내가 보고서를 작성하려면이여러 번 SQL Server의

   30 Day delay 60 Day Delay 90 day delay 120 day delay 
Fruits   1    1    0    0 
Grains   1    0    1    1 
Vegetables  2    0    1    1 
Other category 1    1    0    1 

조건과 같은 보고서를 작성하기 위해 필요한이

ProductName SaleReceipt SaleCode 
-------------------------------- 
F-Apple  1001  1 
F-Orange 1002  2 
G-Rice  1003  3 
G-Barile 1005  4 
G-Oats  1006  1 
V-Carrot 1007  4 
V-Cabbage 1008  3 
V-Potato 1009  1 
V-Tomato 1010  1 
Chocolate 1011  4 
Cookies  1012  1 
Cakes  1013  2 

같은 소스 테이블을이 곳으로 그룹화됩니다

  • F로 시작하는 모든 ProductName은 과일로 그룹화됩니다.
  • 모두 Pr = (SaleReceipt)의 개수 SaleCode와 : G로 시작 oductName은 V는
  • 다른 제품 이름은 다른 카테고리

  • 30 일 지연 이동 야채로 그룹화로 시작

  • 모든 제품 이름 곡물로 그룹화 1

  • 60 일간 지연 (SaleReceipt)의 개수 SaleCode = 2
  • 90 일 지연 (SaleReceipt)의 개수 SaleCode = 3
  • 120일의 지연 (SaleReceipt)의 카운트 사 leCode> = 4

    두 번 그룹화하는 방법을 찾지 못했습니다. 난 당신이 group bycase를 사용할 수있는 SQL 서버를 2014

+5

그 접두사 말도 안돼 끔찍한입니다. 유형을 나타내는 또 다른 열이 있어야합니다. 일단 당신이 접두사의 그 끔찍한 엉망을 회피하면 이것은 꽤 기본적인 그룹화 운동입니다. –

답변

6

을 사용하고 있습니다. 또는 조회 표를 사용하십시오.

select coalesce(c.name, 'Other category'), 
     sum(case when salescode = 1 then 1 else 0 end) as salecode_1, 
     sum(case when salescode = 2 then 1 else 0 end) as salecode_2, 
     sum(case when salescode = 3 then 1 else 0 end) as salecode_3, 
     sum(case when salescode = 4 then 1 else 0 end) as salecode_4 
from t left join 
    (values ('F-%', 'Fruit'), ('G-%' , 'Grain'), ('V-%', 'Vegetable') 
    ) c(pattern, name) 
    on t.productname like c.pattern 
group by coalesce(c.name, 'Other category'); 
+0

고든 리노프 감사합니다. 나는 그것을 시도했다. 보고서의 모든 셀에 동일한 값이 표시됩니다. 내가 원하는 것은 다음과 같습니다 과일에서 30 일 지연 셀, 조건 select *를 가진 데이터를 원합니다. 제품 이름은 F_ %와 같고 SaleReceipt의 수는 SaleCode = 1입니다. – Please

+0

Gordon Linoff에게 감사드립니다. 나는 결과를 얻었다. 도와 주셔서 대단히 감사합니다. 불행히도 스택 오버플로가이 사이트에 최근에 가입했을 때 대답으로 표시하지 못합니다. – Please