2017-12-12 12 views
0

방송국 세부 정보를 표시하는 데이터 세트가 필요하며 나중에 내 보고서 (SSRS)에 사용되는 상위 5 개를 식별해야하므로 내 목표는 새로운 열 top3을 만드는 것입니다. 이를 나타내며 차트 용 필터로 사용됩니다. SSRS에서 필터를 수행 할 수 없다는 것을 깨달았으므로 SQL 부분에서이 작업을 수행합니다.TSQL 고급, 즉시 레코드 수의 확인

나는 이것을 CTE와 함께했지만, 현대적인 TSQL이 일부 라인/새로운 기능을 사용하여 더 잘할 수 있다고 생각합니까 ?? (나는 잠시 그것으로부터 떨어져 있었다) Tx all. 이것은 내 솔루션 Tx 및 행복한 휴일입니다. 이 같은 2016

; WITH cte AS (
SELECT 'St100' St union all select 'St101' St union all select 'St101' St union all select 'St101' St UNION all 
SELECT 'St104' St union all select 'St105' St union all select 'St106' St union all select 'St106' St UNION all 
SELECT 'St122' St union all select 'St122' St union all select 'St122' St union all select 'St122' St union all 
SELECT 'St108' St union all select 'St108' St union all select 'St108' St ) 


SELECT 
cte1.*, cte2.cc , 
CASE wHEN cte2.cc IS NULL THEN 'N' ELSE 'Y' END top3 
FROM cte cte1 
LEFT JOIN (SELECT TOP 3 St, COUNT(*) cc FROM cte GROUP BY St ORDER BY COUNT(*) desc) cte2 ON cte2.St = cte1.St 

ORDER BY 1 
+0

그래서 당신은 당신이 원하는하지만'SQL'을 잘 사용하여 유사한 결과를 얻을 필요가 무엇을 얻고있다? – ViKiNG

+0

Tx VikingG, 예. 추가 단계를 피하기 위해이 새로운 기능이 있어야한다고 생각합니다. –

답변

1

뭔가가 작동 MSServer에있어 : ​​

; WITH cte AS (
SELECT 'St100' St union all select 'St101' St union all select 'St101' St union all select 'St101' St UNION all 
SELECT 'St104' St union all select 'St105' St union all select 'St106' St union all select 'St106' St UNION all 
SELECT 'St122' St union all select 'St122' St union all select 'St122' St union all select 'St122' St union all 
SELECT 'St108' St union all select 'St108' St union all select 'St108' St ) 

SELECT 
    St 
    , CAST(CASE WHEN SUM(CASE WHEN L <> St OR L IS NULL THEN 1 ELSE 0 END) OVER (ORDER BY R) < 4 THEN 1 ELSE 0 END AS bit) Top3 
FROM 
    (
     SELECT 
      St 
      , R 
      , LAG(St, 1, NULL) OVER (ORDER BY R) L 
     FROM 
      (
       SELECT 
        St 
        , ROW_NUMBER() OVER (ORDER BY C DESC, St) R 
       FROM 
        (
         SELECT 
          St 
          , COUNT(*) OVER (PARTITION BY St) C 
         FROM cte 
        ) Q 
      ) Q 
    ) Q 
ORDER BY St 
+0

Tx Chris for idea! –