如何显示特定列的特定数据量

时间:2017-09-21 21:18:35

标签: sql sql-server-2008-r2

考虑下表

Dept product name parts WO 32 aa abc 11 1234 32 aa aas 18 2213 32 bb asd 16 3424 32 aa adf 19 1255 32 cc asa 10 7567 32 aa agd 11 1233 31 ss fsf 23 3434

我有大约100个部门。在我的桌子上。我想要的是当部门。是32,产品是" aa",我只想显示30个或更少。所以在这种情况下,aa的零件总数是59.因此,第一个产品有11个零件,下一个产品有18个零件,因此现在应该忽略所有其他产品。

预期产出

Dept product name parts WO 32 aa abc 11 1234 32 aa aas 18 2213 32 bb asd 16 3424 32 cc asa 10 7567 31 ss fsf 23 3434

感谢所提供的任何帮助。

2 个答案:

答案 0 :(得分:0)

假设WO是主键,那么使用SUM窗口函数来解决它。

SELECT yt.Dept, yt.product, yt.name, yt.parts, yt.WO
FROM yourtable yt
LEFT JOIN (
   SELECT *, sum(y.parts) over (partition by y.dept order by y.parts) tsum
   FROM yourtable y
   WHERE y.product = 'aa'
) t ON yt.WO= t.WO
WHERE yt.dept != 32 or (yt.dept = 32 and t.tsum < 59) or (yt.dept = 32 and yt.product != 'aa')

答案 1 :(得分:0)

您可以使用SUM()窗口函数,您必须按dept和product

进行分区
SELECT dept,
       product,
       name,
       parts,
       wo
  FROM (SELECT *, 
               SUM(parts) OVER (PARTITION BY dept, product ORDER BY name) rt
          FROM t
       ) t_rt
 WHERE rt <= 30
 ORDER BY dept DESC,
          product,
          wo

结果

dept    product name    parts   wo
32      aa      abc     11      1234
32      aa      aas     18      2213
32      bb      asd     16      3424
32      cc      asa     10      7567
31      ss      fsf     23      3434