【问题标题】:Join count table加入计数表
【发布时间】:2015-12-08 13:37:53
【问题描述】:

我有一张这样的桌子:

 ID CAT1 CAT2 CAT3 日期
 1 IT NETW cisco1 2015-11-26
 2 IT NETW cisco2 2015-11-26
 1 IT NETW cisco1 2015-11-27
 2 IT NETW cisco2 2015-11-27
 3 OT VID dist1 2015-11-26
 4 OT VID dist2 2015-11-26
 3 OT VID dist1 2015-11-27
 4 OT VID dist2 2015-11-27
 5 ET ALT翻转1 2015-11-26
 6 ET ALT翻转2 2015-11-26
 5 ET ALT翻转1 2015-11-27
 6 ET ALT翻转2 2015-11-27
抄送..

我需要这样的计数输出:

CAT1 CAT2 CAT3 COUNT(2015-11-26) COUNT(2015-11-27)
 IT 网络 cisco1 1 1
 IT 网络 cisco2 1 1
 OT VID dist1 1 1
 OT VID dist1 1 1
 ET ALT翻转1 1 1
 ET ALT翻转1 1 1

如您所见,它们以不同的日期复制。 但同一时间,日期为 2015-11-27 的行与 2015-11-26 不同,在这种情况下,计数应输出 0 或 null。你能帮我做一个查询吗?我正在使用 SQL Server 2008。

【问题讨论】:

  • 分组依据。使用 CASE 进行条件计数。

标签: sql sql-server join count


【解决方案1】:

做一个GROUP BY。使用CASE表达式进行条件计数:

select CAT1, CAT2, CAT3,
       count(case when DATE = '2015-11-26' then 1 end) as cnt_2015-11-26,
       count(case when DATE = '2015-11-27' then 1 end) as cnt_2015-11-27
from tablename
group by CAT1, CAT2, CAT3

编辑

同样使用派生表计算cnt_2015-11-26和cnt_2015-11-27之间的差异:

select CAT1, CAT2, CAT3, cnt_2015-11-26, cnt_2015-11-27,
       cnt_2015-11-26 - cnt_2015-11-27 as difference
from
(
select CAT1, CAT2, CAT3,
       count(case when DATE = '2015-11-26' then 1 end) as cnt_2015-11-26,
       count(case when DATE = '2015-11-27' then 1 end) as cnt_2015-11-27
from tablename
group by CAT1, CAT2, CAT3
) dt

【讨论】:

  • 完美,这正是我想要的,如果我想添加另一行,这将是 cnt_2015-11-26 - 2015-11-27 之间的差异?
  • 我会将当前查询包装到派生表中,然后修复主查询中的差异。我会在几分钟后补充。回来看看。
  • 也许添加WHERE DATE IN ('2015-11-26','2015-11-27') 会提高性能。试试看速度有没有差别。
【解决方案2】:

通过使用 Cross Apply 和 Pivot 我们也可以做到

select id,
CAT1,
CAT2,
CAT3,
[2015-11-26] AS 'COUNT[2015-11-26]',
[2015-11-27] AS 'COUNT[2015-11-27]' from (
select id,CAT1,CAT2,CAT3,col,val from @t
    CROSS APPLY (values('2015-11-26',date),('2015-11-27',date))cs(col,val))T
    PIVOT(count(val) FOR COL IN ([2015-11-26],[2015-11-27]))P

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 1970-01-01
    • 2013-05-29
    • 2021-02-26
    • 2014-08-30
    相关资源
    最近更新 更多