2017-02-08 4 views
0

아래 코드는 그들이 속한 상점 코드별로 계정 번호를 나열하고 '만료 됨', '활성'또는 '올드'와 같이 계정 옆에 레이블을 표시합니다. 나는 shop_thames = 1 old, 4 active 및 10 expired와 같은 각 계정 유형의 수를 보여주는 각 상점 코드별로 요약을 생성 할 수 있기를 원합니다. 나는 이것을 어떻게 얻을 수 있을까? 이 같은행 레이블 집계

SELECT 
shop_code, 
CASE WHEN MAX(i_date) < DATEADD(day , - 180 , GETDATE()) THEN 'Expired' WHEN MAX(i_date) > DATEADD(day , - 30 , GETDATE())THEN 'Active' ELSE 'Old' END AS Account_Type, 
account_id, 
SUM(Revenue) AS Spend 

FROM 
[company].[dbo].name 

WHERE 
Date_Reporting_LY = '2016' 
AND Total_Revenue > 0 

GROUP BY 
shop_code, 
account_id 
+0

sql-server-2012 – 80gm2

답변

0

뭔가를 수행해야합니다

select shop_code, account_type, count(*) 
    from (SELECT shop_code, 
       CASE WHEN MAX(i_date) < DATEADD(day , - 180 , GETDATE()) THEN 'Expired' WHEN MAX(i_date) > DATEADD(day , - 30 , GETDATE())THEN 'Active' ELSE 'Old' END AS Account_Type 
      FROM [company].[dbo].name  
     WHERE Date_Reporting_LY = '2016' 
      AND Total_Revenue > 0) x 
GROUP BY shop_code, Account_Type 
+0

나는 이것을 시도하고 내 결과 열에 1 개의 값만 제공합니다. 그런 다음 몇 가지 SUM (CASE 문을 외부 선택이 작동하는지 확인하려면 시도했지만 단지 0 또는 1 가져옵니다. 나는 account_id 값을 추가하는 대신 상점 코드를 찾고 있기 때문에 이것이라고 생각합니다. – 80gm2

+0

shop_code를 account_id로 바꾸고 – MikeS

+0

으로 바꾸십시오. 상점 코드별로 각 계정 유형을 합계하지 않기 때문에 – 80gm2

0

대부분 그대로 쿼리를 유지하고, 또 그것을 포장 선택

원래의 질의에
SELECT shop_code, account_type, count(*) 
FROM (
SELECT 
shop_code, 
CASE WHEN MAX(i_date) < DATEADD(day , - 180 , GETDATE()) THEN 'Expired' WHEN MAX(i_date) > DATEADD(day , - 30 , GETDATE())THEN 'Active' ELSE 'Old' END AS Account_Type, 
account_id, 
SUM(Revenue) AS Spend 

FROM 
[company].[dbo].name 

WHERE 
Date_Reporting_LY = '2016' 
AND Total_Revenue > 0 

GROUP BY 
shop_code, 
CASE WHEN MAX(i_date) < DATEADD(day , - 180 , GETDATE()) THEN 'Expired' WHEN MAX(i_date) > DATEADD(day , - 30 , GETDATE())THEN 'Active' ELSE 'Old' END 
account_id 
) x 
GROUP BY 
shop_code, 
account_type 

한 변화 - MySQL의 집합 함수 외부에서 모든 요소를 ​​그룹화한다고 주장하지는 않지만 실제로 그렇게하는 것이 가장 좋습니다. 표시된 것처럼 전체 사례 명세서별로 그룹화하면 볼 수없는 값으로 집계 할 때 발생하는 문제를 방지 할 수 있습니다.