SSMS
 sql >> база данни >  >> Database Tools >> SSMS

Разделете набора в неравномерни процентни кофи

Не знам, ако разбирам правилно...

Преди всичко изглежда, че тук има доста очевидна грешка:

    WHEN t.bucket > 60 AND t.bucket <=90 THEN 'NULL'

Това не трябва ли да е това:

    WHEN t.bucket >90 THEN 'NULL'

Функцията NTILE ще разпредели вашите комплекти в доста равномерни кофи. Проверете моя изход и разберете как се държи това в ъглите. Предлагам да използвате изчислен процент на ред като тук:

WITH tally
(vals, bucket)
AS
(
    SELECT
         DATEADD(DAY, - ROW_NUMBER() OVER (ORDER BY (SELECT NULL)), GETDATE())
        ,NTILE(100) OVER (ORDER BY (SELECT NULL))
    FROM
    (
        VALUES (0), (0), (0), (0), (0), (0), (0), (0), (0)) AS a(n)
        CROSS JOIN (VALUES (0), (0), (0), (0), (0), (0), (0), (0), (0)) AS b(n)
        CROSS JOIN (VALUES (0), (0), (0), (0), (0), (0), (0), (0), (0)) AS c(n)
    )
SELECT *
INTO #tmpBuckets
FROM Tally;

--Използвам тази #tmpBuckets-table, за да се доближа до вашата Имам маса сценарий

WITH Numbered AS
(
    SELECT *
          ,ROW_NUMBER() OVER(ORDER BY vals DESC) / ((SELECT COUNT(*) FROM #tmpBuckets)/100.0)  AS RunningPercentage
    FROM #tmpBuckets
)
,ComputeBuckets AS
(
    SELECT
     t.*
    , CASE
        WHEN t.RunningPercentage <= 35 THEN 'a'
        WHEN t.RunningPercentage > 35 AND t.RunningPercentage <=60 THEN 'b'
        WHEN t.RunningPercentage > 60 AND t.RunningPercentage <=90 THEN 'c'
        WHEN t.RunningPercentage >90  THEN 'NULL'
    END AS ShnugoMethod
    , CASE
        WHEN t.bucket <= 35 THEN 'a'
        WHEN t.bucket > 35 AND t.RunningPercentage <=60 THEN 'b'
        WHEN t.bucket > 60 AND t.RunningPercentage <=90 THEN 'c'
        WHEN t.bucket > 90  THEN 'NULL'
    END AS ZikatoMethod
    FROM Numbered t
)
SELECT cb.*
FROM ComputeBuckets cb
ORDER BY cb.vals DESC

GO
DROP TABLE #tmpBuckets;

Мисля, че знаете как да използвате такъв cte за актуализиране на таблицата с източник. В противен случай просто се върнете с друг въпрос :-)




  1. DBeaver
  2.   
  3. phpMyAdmin
  4.   
  5. Navicat
  6.   
  7. SSMS
  8.   
  9. MySQL Workbench
  10.   
  11. SQLyog
  1. Как да намерите името на сървъра на SQL Server Management Studio

  2. Проверка на съхранената процедура в SQL в .NET Front End (подобно на опцията за анализиране в SSMS)

  3. Как да накарате T-SQL кода да намери дубликати?

  4. „DATE“ не е разпознато име на вградена функция

  5. ssms копие на база данни