Sql server 2012 SQL";“集团”;及;计数“;类别
编辑。这是我们的后续报道。简化问题。摆桌子Sql server 2012 SQL";“集团”;及;计数“;类别,sql-server-2012,Sql Server 2012,编辑。这是我们的后续报道。简化问题。摆桌子 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 | 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
我走了那么远,它就成功了。我正在努力解决的问题(即,不知道如何开始)是如何设置一个查询来显示所有可能的类型组合(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
任何有建设性的提示或想法都将不胜感激。这是假设您每个日期最多有2种
类型
您可以使用带有MIN()
和MAX()
的CASE WHEN
语句来检查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
请包含所有相关表的示例数据。我只看到账单的样本数据
table@Squirrel-问题是关于一张桌子。如何从单个表中提取数据。您的原始查询
涉及3个表账单、账单详细信息、位置
。此外,请确保样本数据与预期输出匹配。在预期输出中,我看到了样本数据中不存在的日期,如2018/01/01
和2018/01/04
fiddle@Squirrel-但问题是以“让我们假设下面的简化表格”开头的。谢谢。如果我只有两个事务(这实际上是我在原始问题中指定的),那么这个方法很有效。如果有多个(3+)事务(如FF(F)S、SS(S)F、FF(F))可以分组为FS、SF、FF,那么更一般的查询如何?编辑答案。