0

私はSQLServer2005を使用しています。

単一の結果でテーブルからフェッチmonthlyTotalAppoinmentしたい。monthlyEmployeewiseTotalappointment

予定表

appoinmentId
appoinmentDate
employeeId

正常にフェッチでき、次のクエリからmonthlyTotalAppoinmentも取得できemployeewisetotaappoinmentますが、毎月欲しいですemployeewiseappoinment

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             9
     September      September      5             9
     October        October        3             9      

しかし、私はフォローしたい

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

1 に答える 1

0

私はあなたの質問にいくつかのマイナーなポイントを逃していますが、大きな問題はこのクエリで扱われます:

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 

実用的な例はここにあります。

何が欠けている?

  1. 何ヶ月も2列ある理由がわかりませんでした。これに理由がある場合は、コードを修正します。
  2. 私は利用可能な詳細で月だけをリストしました。1月も例に含まれているのを見ました。データがない場合でも12か月すべてを表示したい場合は、お知らせください。追加されます。
  3. まったく同じ列名を使用しませんでした。必要に応じて変更できると確信しています:-)
于 2012-10-18T10:34:21.737 に答える