簡體   English   中英

如何將與2個不同的值相關的值分組/匯總為一個?

[英]How can I group/aggregate values correlated to 2 distinct values as one?

因此,在數據庫中,“ value_type”列中存在一個可以互換的值。 當我匯總時,我希望能夠將兩個值(A和B)加總/匯總在一起,但不能對其他值(C)加總/匯總? 一些樣本數據如下:

Value_ID       Value_Tx         Value_Type
   1              5                A
   2              2                A 
   3              7                B
   4              5                C
   5              3                C
   6              1                D
   7              7                F

我想要的結果:

 Sum            Value_Type
  14               A | B
  8                 C
  1                 D
  7                 F

我知道總的來說,我會這樣做:

select sum(value)tx, value_type
  from table
 group by value_type;

提前致謝。

用例表達式為group by

SELECT SUM(value_tx), 
       CASE 
         WHEN value_type IN ( 'A', 'B' ) THEN 'A | B ' 
         ELSE value_type 
       END 
FROM   t 
GROUP  BY CASE 
            WHEN value_type IN ( 'A', 'B' ) THEN 'A | B ' 
            ELSE value_type 
          END 
ORDER  BY 2; 

演示版

select sum(value)tx, 'A | B' value_type
  from table where value_type  in ('A','B')

union all

select sum(value)tx, value_type
  from table where value_type not in ('A','B')
 group by value_type;

簡單的方法,希望對您有所幫助:)

我只在MySQL中嘗試過查詢

select sum(value_tx), 
case 
   when value_type IN ('A', 'B') THEN 'A | B'
   else value_type
end as valtype
from table
group by valtype

如何動態設置組的示例:

WITH test_data AS
(
 SELECT 1 val_id, 5 val_tx, 'A' val_typ FROM dual
 UNION ALL
 SELECT 2, 2, 'A' FROM dual 
 UNION ALL
 SELECT 3, 7, 'B' FROM dual 
 UNION ALL
 SELECT 4, 5, 'C' FROM dual 
 UNION ALL
 SELECT 5, 3, 'C' FROM dual 
 UNION ALL
 SELECT 6, 1, 'D' FROM dual 
 UNION ALL
 SELECT 7, 7, 'F' FROM dual 
 )
 SELECT break_group, SUM(val_tx) total_tx, value_type FROM 
 (
  SELECT val_id, val_tx, val_typ
  , CASE WHEN dense_rnk IN (1, 2) THEN 1 ELSE (dense_rnk-1) END break_group
  , CASE WHEN dense_rnk IN (1, 2) THEN 'A|B' ELSE val_typ   END value_type
  FROM
  (
   SELECT val_id, val_tx, val_typ
        , DENSE_RANK() OVER (ORDER BY val_typ) dense_rnk 
    FROM test_data
  )
 )
 GROUP BY break_group, value_type
 ORDER BY break_group
/

輸出:

 BREAK_GROUP  TOTAL_TX   VALUE_TYPE
 -----------------------------------
 1            14         A|B
 2             8          C
 3             1          D
 4             7          F

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM