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,那么更一般的查询如何?编辑答案。