簡體   English   中英

SQL - 如何對案例語句進行分類?

[英]SQL - How to Categorize a Case Statement?

在這個示例數據集中,我有一些顏色:“紅色”和“藍色”以及一些水果:“蘋果”和“葡萄”與人/姓名相關聯。

在此處輸入圖像描述

我的目標是為這些分組中的每一個添加一個列,稱為"Colors"Fruit 每當它們各自分組的值 > 0 時,這些新添加的列將計數 +1。

例如,如果 "Red" 或 "Blue" 包含 > 0 的值,我們將 +1 添加到Colors 對於 John Smith,由於 Red 和 Blue 列都包含 > 0 的值,因此Colors列將為 2。這是預期的輸出:

在此處輸入圖像描述

我知道 case 語句可以加 1 或 0,但是當每個分組有 2 列時,我們該怎么做呢?

你不需要在 CASE 中。

SELECT blue, red, (blue > 0) + (red > 0) colors,
       apple, grapes, (apple > 0) + (grapes > 0) fruit
FROM source_table

源表中的值不應為 NULL。

SELECT
  *,
  ((CASE WHEN apple > 0 THEN 1 ELSE 0 END) + (CASE WHEN WHEN grapes > 0 THEN 1 ELSE 0 END)) as fruit,
  ((CASE WHEN red > 0 THEN 1 ELSE 0 END) + (CASE WHEN blue > 0 THEN 1ELSE 0 END)) as colors
from table

假設源數據處於旋轉狀態

with cte as (
select 'john' as name, 2 as blue, 3 as red, 2 as apple, 4 as grape union all
select 'tom', 0 , 8, 0, 0
)
select
      name
    , blue
    , red
    , coalesce((blue > 0),0) 
      + coalesce((red > 0),0)
      as colours
    , apple
    , grape
    , coalesce((apple > 0),0) 
      + coalesce((grape > 0),0)
      as fruits
from cte
姓名 | 藍色 | 紅色 | 顏色 | 蘋果| 高分辨率照片| CLIPARTO 葡萄| 高分辨率照片| CLIPARTO 水果
 :--- |  ---: |  --: |  ------: |  ----: |  ----: |  -----:
約翰 |  2 |  3 |  2 |  2 |  4 |  2
湯姆|  0 |  8 |  1 |  0 |  0 |  0

db<> 在這里擺弄

暫無
暫無

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

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