Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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 server 2005 在SQLServer2005中,通过单个查询按总数和按详细信息获取月度记录_Sql Server 2005_Subquery - Fatal编程技术网

Sql server 2005 在SQLServer2005中,通过单个查询按总数和按详细信息获取月度记录

Sql server 2005 在SQLServer2005中,通过单个查询按总数和按详细信息获取月度记录,sql-server-2005,subquery,Sql Server 2005,Subquery,我正在使用SQLServer2005 我想在单个结果中从appointment表中获取monthlyTotalAppointment和monthlyEmployeewiseTotal 预约表 appoinmentId appoinmentDate employeeId 我可以成功地从以下查询中获取MonthlyTotalAppoint,并获取EmployeeWiseToTaAppoint,但我希望每月获得EmployeeWiseAppoint SELECT * FROM (SELECT

我正在使用SQLServer2005

我想在单个结果中从
appointment
表中获取
monthlyTotalAppointment
monthlyEmployeewiseTotal

预约表

appoinmentId
appoinmentDate
employeeId
我可以成功地从以下查询中获取
MonthlyTotalAppoint
,并获取
EmployeeWiseToTaAppoint
,但我希望每月获得
EmployeeWiseAppoint

SELECT * 
  FROM (SELECT Datename(M, Dateadd(M, NUMBER - 1, 0)) AS month 
          FROM MASTER..SPT_VALUES 
         WHERE TYPE = 'p' 
               AND NUMBER BETWEEN 1 AND 12) months 
       LEFT JOIN (SELECT Datename(MM, APPOINMENTDATE) month, 
                         Count(APPOINMENTID)          AS TotalAppointment 
                    FROM APPOINTMENT 
                   GROUP BY Datename(MM, APPOINMENTDATE)) appoinment 
              ON months.MONTH = appoinment.MONTH 
我得到以下输出

但是我想要下面的输出

   appoinementId   employeeId   appoinemntDate  
   -------------  -----------   ---------------
    1                 4         8/25/2012 12:00:00 AM
    2                 4         8/25/2012 12:00:00 AM
    3                 4         8/25/2012 12:00:00 AM
    4                 4         8/25/2012 12:00:00 AM
    5                 4         8/25/2012 12:00:00 AM
    6                 4         9/25/2012 12:00:00 AM
    7                 2         9/25/2012 12:00:00 AM
    8                 2         9/25/2012 12:00:00 AM
    9                 2         9/25/2012 12:00:00 AM
    10                4         9/25/2012 12:00:00 AM
    11                4         10/25/2012 12:00:00 AM
    12                2         10/25/2012 12:00:00 AM
    13                4         10/25/2012 12:00:00 AM

对于上述数据记录输出(对于EmployeeId 4)

但我想跟着你

     Month           MonthData   Totalappoinemnt TotalEmployeewiseAppointmemt  
   -------------  -----------   -------------- ------------------------------
    January..      NULL..       NULL..          NULL..
     Augest         Augest         5             5
     September      September      5             2
     October        October        3             2       

我在你的问题中遗漏了一些小问题,但大问题在这个问题中得到了解决:

SELECT t1.*, 
       t2.EMP_COUNT 
  FROM (SELECT Datename(MONTH, APPOINEMNTDATE) Month_Name, 
               Count(*)                        app_count 
          FROM APPOINTMENTTABLE 
         GROUP BY Datename(MONTH, APPOINEMNTDATE))T1 
       LEFT JOIN (SELECT Count(*)                        emp_count, 
                         Datename(MONTH, APPOINEMNTDATE) Month_Name 
                    FROM APPOINTMENTTABLE 
                   WHERE EMPLOYEEID = 4 
                   GROUP BY Datename(MONTH, APPOINEMNTDATE))T2 
              ON t1.MONTH_NAME = t2.MONTH_NAME 
可以找到一个工作示例

少了什么

  • 不明白为什么你有两个专栏长达数月。如果有原因,我会修改代码
  • 我只列出了几个月的详细信息。我看到一月也是一个例子。如果您想显示所有12个月的数据,即使没有可用的数据,请让我知道,它将被添加
  • 没有使用完全相同的列名。如果需要,我相信您可以更改它们:-)

  • 如果数据分布在几年内,你会把所有一年的一月加在一起。不,一点也不,我没有考虑年份。我不太明白你想做什么。你能为我们发布一些示例数据吗?好的,现在我明白了,正在写一个查询:-)
    SELECT t1.*, 
           t2.EMP_COUNT 
      FROM (SELECT Datename(MONTH, APPOINEMNTDATE) Month_Name, 
                   Count(*)                        app_count 
              FROM APPOINTMENTTABLE 
             GROUP BY Datename(MONTH, APPOINEMNTDATE))T1 
           LEFT JOIN (SELECT Count(*)                        emp_count, 
                             Datename(MONTH, APPOINEMNTDATE) Month_Name 
                        FROM APPOINTMENTTABLE 
                       WHERE EMPLOYEEID = 4 
                       GROUP BY Datename(MONTH, APPOINEMNTDATE))T2 
                  ON t1.MONTH_NAME = t2.MONTH_NAME