如果一列有多个结果(使用 GROUP BY),是否可以更改该列的值?
Is it possible to change the value of a column if it has more than one result (using GROUP BY)?
是否只有超过一个才能改变结果?
我的查询带来了这个结果:
Date
Code
Description
Amount
01/01
1001
Produt A
1234
02/01
1001
Produt A
2345
03/01
1001
Produt A
3456
如果我只有一种产品,那很好。
但如果我有多个,则显示为:
Date
Code
Description
Amount
01/01
1001
Produt A
1234
02/01
1001
Produt A
2345
03/01
1001
Produt A
3456
01/01
1002
Produt B
4321
02/01
1003
Produt B
5432
03/01
1004
Produt B
6543
问题是:是否只有当我的查询中有多个产品时才可以更改值?
像这样;如果我有产品 A 和 B,它应该显示:
Date
Code
Description
Amount
01/01
Various
Various
5555
02/01
Various
Various
7777
03/01
Various
Various
9999
您可以使用 case 表达式,查看每列中(可选不同的)值的计数;例如:
select some_date,
case when count(distinct code) > 1
then 'Various'
else to_char(max(code))
end as code,
case when count(distinct description) > 1
then 'Various'
else max(description)
end as description,
sum(amount) as amount
from your_table
group by some_date
order by some_date;
是否只有超过一个才能改变结果?
我的查询带来了这个结果:
Date | Code | Description | Amount |
---|---|---|---|
01/01 | 1001 | Produt A | 1234 |
02/01 | 1001 | Produt A | 2345 |
03/01 | 1001 | Produt A | 3456 |
如果我只有一种产品,那很好。
但如果我有多个,则显示为:
Date | Code | Description | Amount |
---|---|---|---|
01/01 | 1001 | Produt A | 1234 |
02/01 | 1001 | Produt A | 2345 |
03/01 | 1001 | Produt A | 3456 |
01/01 | 1002 | Produt B | 4321 |
02/01 | 1003 | Produt B | 5432 |
03/01 | 1004 | Produt B | 6543 |
问题是:是否只有当我的查询中有多个产品时才可以更改值?
像这样;如果我有产品 A 和 B,它应该显示:
Date | Code | Description | Amount |
---|---|---|---|
01/01 | Various | Various | 5555 |
02/01 | Various | Various | 7777 |
03/01 | Various | Various | 9999 |
您可以使用 case 表达式,查看每列中(可选不同的)值的计数;例如:
select some_date,
case when count(distinct code) > 1
then 'Various'
else to_char(max(code))
end as code,
case when count(distinct description) > 1
then 'Various'
else max(description)
end as description,
sum(amount) as amount
from your_table
group by some_date
order by some_date;