我有下表:
contract_nr id_supplier id_seller id_vendor 01 1521 NULL NULL 01 1521 2 NULL 01 NULL NULL 538 02 NULL NULL 154 02 NULL NULL 159 03 2626 17 NULL 03 NULL 17 124
结果应该是一个分组表,其中包含基于以下规则的类别字段:
结果应如下所示:
contract_nr category 01 category1 02 category2 03 category1
答案 0 :(得分:1)
您可以使用与case
表达式配对的聚合来检查数据所需的条件:
select
contract_nr,
case
when max(id_supplier) is not null
or max(id_seller) is not null
then 'category1'
when max(id_vendor) is not null
and max(id_supplier) is null
and max(id_seller) is null
then 'category2'
end as category
from your_table
group by contract_nr;
它使用max返回聚合组中的最大非空值的事实。如果组中只存在空值,则它将返回null。
另请注意,如果两个条件都不符合,它将在类别中返回null。您可能希望在案例中添加else 'category3'
以捕获该内容。
答案 1 :(得分:0)
按contract_nr分组,然后使用TAF WATT 301700Z 3018/3118 12005KT 8000 FEW020
BECMG 3022/3024 9999=
TAF WIII 301700Z 3018/3124 VRB05KT 4000 HZ FEW020 SCT100
BECMG 3101/3103 02010KT 8000 NSW SCT022=
和case when
(不包括空值)来执行此操作:
count
请参阅sqlfiddle中的demo。
答案 2 :(得分:0)
您可以使用条件聚合:
SELECT contract_nr,
CASE
WHEN SUM(id_supplier IS NOT NULL) + SUM(id_seller IS NOT NULL) >= 1
THEN 'category1'
WHEN SUM(id_vendor IS NOT NULL) THEN 'category2'
ELSE 'N/A'
END
FROM mytable
GROUP BY contract_nr;
在MySQL中,您可以将SUM
与布尔表达式一起使用,以查找每个组中满足条件的次数。因此,使用谓词:
SUM(id_supplier IS NOT NULL) + SUM(id_seller IS NOT NULL) >= 1
我们可以测试,对于给定的contract_nr
,至少有一个记录是否存在 id_supplier
,或 id_seller
,或两者不为空。