编辑。这是another question的后续内容。为了简化问题。假设一个表
date | id | type
01/01 | 1 | F
02/01 | 1 | F
02/01 | 1 | F
03/01 | 1 | S
03/01 | 1 | S
04/01 | 1 | F
04/01 | 1 | S
05/01 | 1 | S
我正在寻找一种通过每天的交易类型组合来总结上表的方法。如果某人(id)每天只有一笔交易,则算作单一类型。如果它们不止一个,则视为一个。我已经完成了原始查询,并且可以正常运行。上表的输出为:
date | Single | Multiple
01/01 | 1 | 0
02/01 | 0 | 1
03/01 | 0 | 1
04/01 | 0 | 1
05/01 | 1 | 0
我走了那么远,而且行得通。我正在努力解决的问题(即不知道如何开始)是如何设置查询以显示所有可能的Type组合(SS,FF,FS),而不仅仅是计算多个事务。所需的输出如下:
date | Single | # FF | # FS | # SS
01/01 | 1 | 0 | 0 | 0
02/01 | 0 | 1 | 0 | 0
03/01 | 0 | 0 | 0 | 1
04/01 | 0 | 0 | 1 | 0
05/01 | 1 | 0 | 0 | 0
任何建设性的提示或想法将不胜感激。
答案 0 :(得分:1)
这是假设您每个日期最多有2个types
。
您可以将CASE WHEN
语句与MIN()
和MAX()
一起使用来检查FF
,FS
或SS
select [date],
case when count(*) = 1 then 1 else 0 end as Single,
case when count(*) >= 2
and min([type]) = 'F'
and max([type]) = 'F'
then 1
else 0
end as [# FF],
case when count(*) >= 2
and min([type]) = 'F'
and max([type]) = 'S'
then 1
else 0
end as [# FS],
case when count(*) >= 2
and min([type]) = 'S'
and max([type]) = 'S'
then 1
else 0
end as [# SS]
from yourtable
group by [date]
编辑:
对于3种以上的类型,只要将count(*) = 2
为count(*) >= 2
或type
F
更改为S