我有以下查询,我只想按3列(SUBJECT_CODE、CATEGORY_CODE、ASSROUNTATION_CODE)进行分组,因为这些是多个条目.

我知道我需要提供所有具有SELECT的列,但我在SELECT中需要这些列,而在GROUP BY中不需要这些列,否则输出将不正确.如何做到这一点?有没有其他办法?

我可以提供一个快照,为什么我需要这个?突出显示的是附件中的重复,我想避免,只需要为那些单一的记录.

请提个建议.

  select rts.MERCH_DIV_NUM, min(rts.DEPT_NUM) DEPT_NUM, bc.subject_code, bc.category_code,
         rts.ASSORTMENT_CODE, rts.CURR_PEND_QTY, 
         rts.CURR_PEND_AMT, a.assortment_desc
  from rts_subcat_dept_pending rts
  inner join bn_assortment a on rts.assortment_code = a.assortment_code
  inner join bn_category bc on substr(rts.assortment_code, 0, 4) = bc.category_code      
  group by bc.subject_code, bc.category_code, rts.ASSORTMENT_CODE

推荐答案

使用窗口函数,您可以避免对不在GROUP BY列中的每一列使用聚合函数

WITH CTE aS (  select rts.MERCH_DIV_NUM,
  rts.DEPT_NUM,
  ROW_NUMBER() OVER ( PARTITION BY bc.subject_code, bc.category_code, rts.ASSORTMENT_CODE ORDER BY  rts.DEPT_NUM ASC) rn
        , bc.subject_code, bc.category_code,
         rts.ASSORTMENT_CODE, rts.CURR_PEND_QTY, 
         rts.CURR_PEND_AMT, a.assortment_desc
  from rts_subcat_dept_pending rts
  inner join bn_assortment a on rts.assortment_code = a.assortment_code
  inner join bn_category bc on substr(rts.assortment_code, 0, 4) = bc.category_code      
) SELECT MERCH_DIV_NUM,DEPT_NUM,subject_code,category_code,ASSORTMENT_CODECURR_PEND_QTY
,CURR_PEND_AMT,assortment_desc FROM CTE WHERE rn = 1

Sql相关问答推荐

Group By子句返回太多行

PostgreSQL:如果发现多行具有相似列值,则跳过 Select 行

LEFT JOIN不显示计数0我期望的方式

MariaDB查询在逗号分隔的字符串中查找多个值

Django将字符串筛选为整数?

SQL SELECT MOST NEST TIMESTAMP BEAT ORDER

如何在SQL中更新Json字符串

如何计算一个用户S的日常连胜?

PostgreSQL抽奖查询

重用传递给 node 的参数-postgres upsert查询

基于是否具有某些数据的关联表覆盖SELECT语句中的列值

如何根据行状态设置正确的标志

按属性值 Select 数组元素Postgres Jsonb

在Power Bi中将SQL代码转换为DAX

将最近的结束日期与开始日期相匹配

给定 3 个键列,从一个表中 Select 另一表中不存在的所有数据

自动生成计算频率的列

在给定的日期范围内填写缺失的日期

SQL Group By 然后映射出是否存在值

遍历数据,计算每个月最后三天的总和