Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SQL从多个表中获取计数(*)_Sql_Sql Server - Fatal编程技术网

使用SQL从多个表中获取计数(*)

使用SQL从多个表中获取计数(*),sql,sql-server,Sql,Sql Server,我有两个表Registration\u Table和ApplicationStatus\u Table。为了便于理解,我仅从注册表中选取了一列。在应用程序状态表中,根据注册日期和最终提交日期检查状态 登记表 Registrationdate ----------------------- 2016-12-22 12:52:48.493 2016-12-21 15:05:24.533 应用程序状态表 FinalSubmissiondate InnovationS

我有两个表
Registration\u Table
ApplicationStatus\u Table
。为了便于理解,我仅从
注册表中选取了一列。在应用程序状态表中,根据注册日期和最终提交日期检查状态

登记表

 Registrationdate
 -----------------------
 2016-12-22 12:52:48.493
 2016-12-21 15:05:24.533
应用程序状态表

FinalSubmissiondate              InnovationStatus
-------------------------------------------------
2016-12-22 12:52:48.493          Completed
2016-12-21 15:05:24.533           11
我需要的结果如下

 Registrationdate    RegistrationsCount   InnovationsStatus
 ----------------------------------------------------------
 2016-12-22               1                1
 2016-12-21               1                0

我需要特定日期的结果多少注册和创新状态。如果InnovationStatus completed表示1和其他所有0。

您可以执行如下操作:

SELECT  CAST(r.Registrationdate AS DATE) AS as Registrationdate,
        COUNT(Registrationdate) OVER (PARTITION BY Registrationdate) AS RegistrationsCount,
        COUNT(CASE WHEN  a.InnovationStatus='Completed' THEN 1 ELSE NULL END) as InnovationsStatus
FROM Registration_Table   r
INNER JOIN ApplicationStatus_Table  a
ON a.FinalSubmissiondate=r.Registrationdate
GROUP BY r.Registrationdate
ORDER BY r.Registrationdate DESC
create table #Registration_Table (
 Registrationdate datetime
)

insert into #Registration_Table
values('2016-12-22 12:52:48.493'),('2016-12-21 15:05:24.533')

create table #ApplicationStatus_Table(
 FinalSubmissiondate datetime,
 InnovationStatus varchar(20)
) 

insert into #ApplicationStatus_Table
values ('2016-12-22 12:52:48.493','Completed'),('2016-12-21 15:05:24.533','11')



SELECT  CAST(r.Registrationdate AS DATE),
        COUNT(Registrationdate) OVER (PARTITION BY Registrationdate) AS RegistrationsCount,
        COUNT(CASE WHEN  a.InnovationStatus='Completed' THEN 1 ELSE NULL END) as InnovationsStatus
FROM #Registration_Table   r
INNER JOIN #ApplicationStatus_Table  a
ON a.FinalSubmissiondate=r.Registrationdate
GROUP BY r.Registrationdate
ORDER BY r.Registrationdate DESC
  Registrationdate       RegistrationsCount InnovationsStatus
     2016-12-22                 1                1
     2016-12-21                 1                0
测试数据:

SELECT  CAST(r.Registrationdate AS DATE) AS as Registrationdate,
        COUNT(Registrationdate) OVER (PARTITION BY Registrationdate) AS RegistrationsCount,
        COUNT(CASE WHEN  a.InnovationStatus='Completed' THEN 1 ELSE NULL END) as InnovationsStatus
FROM Registration_Table   r
INNER JOIN ApplicationStatus_Table  a
ON a.FinalSubmissiondate=r.Registrationdate
GROUP BY r.Registrationdate
ORDER BY r.Registrationdate DESC
create table #Registration_Table (
 Registrationdate datetime
)

insert into #Registration_Table
values('2016-12-22 12:52:48.493'),('2016-12-21 15:05:24.533')

create table #ApplicationStatus_Table(
 FinalSubmissiondate datetime,
 InnovationStatus varchar(20)
) 

insert into #ApplicationStatus_Table
values ('2016-12-22 12:52:48.493','Completed'),('2016-12-21 15:05:24.533','11')



SELECT  CAST(r.Registrationdate AS DATE),
        COUNT(Registrationdate) OVER (PARTITION BY Registrationdate) AS RegistrationsCount,
        COUNT(CASE WHEN  a.InnovationStatus='Completed' THEN 1 ELSE NULL END) as InnovationsStatus
FROM #Registration_Table   r
INNER JOIN #ApplicationStatus_Table  a
ON a.FinalSubmissiondate=r.Registrationdate
GROUP BY r.Registrationdate
ORDER BY r.Registrationdate DESC
  Registrationdate       RegistrationsCount InnovationsStatus
     2016-12-22                 1                1
     2016-12-21                 1                0
结果:

SELECT  CAST(r.Registrationdate AS DATE) AS as Registrationdate,
        COUNT(Registrationdate) OVER (PARTITION BY Registrationdate) AS RegistrationsCount,
        COUNT(CASE WHEN  a.InnovationStatus='Completed' THEN 1 ELSE NULL END) as InnovationsStatus
FROM Registration_Table   r
INNER JOIN ApplicationStatus_Table  a
ON a.FinalSubmissiondate=r.Registrationdate
GROUP BY r.Registrationdate
ORDER BY r.Registrationdate DESC
create table #Registration_Table (
 Registrationdate datetime
)

insert into #Registration_Table
values('2016-12-22 12:52:48.493'),('2016-12-21 15:05:24.533')

create table #ApplicationStatus_Table(
 FinalSubmissiondate datetime,
 InnovationStatus varchar(20)
) 

insert into #ApplicationStatus_Table
values ('2016-12-22 12:52:48.493','Completed'),('2016-12-21 15:05:24.533','11')



SELECT  CAST(r.Registrationdate AS DATE),
        COUNT(Registrationdate) OVER (PARTITION BY Registrationdate) AS RegistrationsCount,
        COUNT(CASE WHEN  a.InnovationStatus='Completed' THEN 1 ELSE NULL END) as InnovationsStatus
FROM #Registration_Table   r
INNER JOIN #ApplicationStatus_Table  a
ON a.FinalSubmissiondate=r.Registrationdate
GROUP BY r.Registrationdate
ORDER BY r.Registrationdate DESC
  Registrationdate       RegistrationsCount InnovationsStatus
     2016-12-22                 1                1
     2016-12-21                 1                0

考虑具有完整计数和条件计数的聚合查询。下面还从条件聚合中返回为零的datetime值中提取时间部分:

SELECT CONVERT(date, r.Registrationdate) As [Date], Count(*) As RegistrationsCount,
       SUM(CASE WHEN a.Status = 'Completed' THEN 1 ELSE 0 END) As InnovationsStatus
FROM Registration_Table r
INNER JOIN ApplicationStatus_Table a
ON r.Registrationdate = a.FinalSubmissiondate
GROUP BY CONVERT(date, r.Registrationdate)

您使用的是哪种数据库管理系统?博士后?Oracle?正如我在问题中提到的,使用sql server@问题是“使用SQL”-SQL是一种查询语言,而不是一种特定的DBMS产品哪一种?MySQL、MSSQL、postgres、oracle等?SQL是一种语言#rtfmI需要使用sql server 2008查询上述显示计数@没有名字的马获取错误:“Registrationdate”附近的语法不正确@吉宾Balachandran@MMK我已经更新了我的答案。如果您有任何问题,请检查并告知我。日期格式应为2016-12-22@吉宾Balachandran@MMK是的,只有当我们将datetime强制转换为date时,您才会得到这样的结果。@MMK也许您在某些记录中有一个空列。使用问题中给定的模式,尝试将计数(1)作为注册计数
@MMK,这应该可以工作+1从我这边。@MMK-请澄清,因为我不理解您的评论。FinalSubmissiondate有一些空日期,但我添加了count(1)作为RegistrationCount,然后也没有显示@Parfati添加了数据转换,然后在转换(日期,r.Registrationdate)=转换(日期,a.FinalSubmissiondate)时工作正常,但计数显示为荣,有2个注册仅显示6个区域Traiton计数日期注册计数创新状态2016-12-06 6