簡體   English   中英

如何計算來自同一表的多個列的值

[英]How to count values from multiples columns of the same table

我正在嘗試構造一個SQL語句,該語句從位於同一表中的多個列返回唯一的非空值。

我嘗試通過使用“ sum”和“ case”來制作此SQL語句,如另一個stackOverflow主題中所述,但是它不起作用。

我也嘗試過這樣:

Select count(distinct SYMPTOM_I, SYMPTOM_II, SYMPTOM_III, SYMPTOM_IV) 
from DIAGNOSTIC_MEDVIR;
    Create table DIAGNOSTIC_MEDVIR(
        NIP varchar(32) not null,
        DIAGNOSTIC_TIME int not null,
        DAY_TIME varchar(32) not null,
        SEX varchar(8) not null,
        AGE int not null,
        SYMPTOM_I varchar(64) not null,
        SYMPTOM_II varchar(64),
        SYMPTOM_III varchar(64),
        SYMPTOM_IV varchar(64),
        PATHOLOGY_I varchar(64) not null,
        PATHOLOGY_II varchar(64),
        PATHOLOGY_III varchar(64),
        Constraint NIP_PK primary key(NIP),
        Constraint CK_SEX check (SEX='Male' or SEX='Female'),
        Constraint CK_DAYTIME(DAY_TIME='Morning' or DAY_TIME='Evening' or                                 
        DAY_TIME='Night')
    );

假設我已經進入該表:

Insert into DIAGNOSTIC_MEDVIR 
values ('195889419', 60, 'Morning', 'Male', 68, 'fever',
        'sore throat', 'headache', , 'throat infection', , );

Insert into DIAGNOSTIC_MEDVIR 
values ('195889420', 67, 'Morning', 'Female', 38, 'fever', 
        'headache', , , 'cold', , );

我想擁有:

fever: 2
sore throat: 1
headache: 1

這種設計是有問題的,證明就是解決方案本身。
如果您決定添加另一種具有第五種症狀的列怎么辦?
您將必須更改所有內容,所有返回信息的查詢(例如此問題)。
無論如何,在這種情況下,您需要分別獲取每個SYMPTOM_X列的結果,並使用UNION對其進行組合。 然后分組以獲得總結果:

select t.symptom, count(*) counter from (
  select SYMPTOM_I symptom from DIAGNOSTIC_MEDVIR
  union all
  select SYMPTOM_II from DIAGNOSTIC_MEDVIR
  union all
  select SYMPTOM_III from DIAGNOSTIC_MEDVIR
  union all
  select SYMPTOM_IV from DIAGNOSTIC_MEDVIR
) t
where t.symptom is not null
group by t.symptom

參見演示
結果:

> symptom     | counter
> :---------- | ------:
> fever       |       2
> headache    |       2
> sore throat |       1

暫無
暫無

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

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