根据列中的值返回记录的百分比

Lum*_*mpy 2 sql-server-2008 t-sql

我正在处理一个 sql 查询,它需要根据特定列的值获取记录的百分比。百分比由用户给出。查询的精简版本如下

SELECT OrganizationID,
       CustomerID,
       OrderID
  FROM x
Run Code Online (Sandbox Code Playgroud)

输出看起来像

 OrganizationID, CustomerID, OrderID 
  123             abc         p456
  123             cba         p457 
  123             bac         p458 
  456             def         p987 
  456             efd         p988
Run Code Online (Sandbox Code Playgroud)

我需要能够为每个组织 ID 提取 50% 的输出。所以在这个例子中,我会返回 2-3 条记录。只要提取正确百分比的记录,哪些记录并不重要。

关于如何解决这个问题的任何想法?

Mar*_*ith 6

;WITH CTE
     AS (SELECT OrganizationID,
                CustomerID,
                OrderID,
                COUNT(*) OVER (PARTITION BY OrganizationID) AS C,
                ROW_NUMBER() OVER (PARTITION BY OrganizationID 
                                       ORDER BY (SELECT 0))     AS RN
         FROM   YourTable)
SELECT OrganizationID,
       CustomerID,
       OrderID
FROM   CTE
WHERE  RN <= CEILING(0.5 * C) 
Run Code Online (Sandbox Code Playgroud)

SQL小提琴