3

問題があります。2 つの異なる列の間のパーセンテージを計算する必要があります。残念ながら、私はそれを機能させることができず、これを実行すると、「無効な列名 'CountOfPlannedVisits'」と「無効な列名 'CountOfPlannedVisitsClosed'」だけが表示されます

SELECT       Count(*) As CountOfPlannedVisits, MAX(datename(month, dbo.tblVisit.DateConfirmed)) AS MonthName,
    SUM(CASE WHEN tblVisit.VisitTypeRef <> '5' THEN 1 ELSE 0 END) AS CountOfPlannedVisitsClosed, CAST(100.0 * SUM("CountOfPlannedVisits") / SUM(CountOfPlannedVisitsClosed) AS Decimal(5,2) ) As OverallAttendance
FROM            dbo.tblContract INNER JOIN
                         dbo.tblCustomer ON dbo.tblContract.CustomerRef = dbo.tblCustomer.CustomerID INNER JOIN
                         dbo.tblContractSite ON dbo.tblContract.ContractID = dbo.tblContractSite.ContractRef INNER JOIN
                         dbo.tblVisit ON dbo.tblContractSite.CardNumber = dbo.tblVisit.CardNumber
WHERE        (tblCustomer.CustomerNumber = '08434') 
AND (tblVisit.Routine = '1')
AND year(tblVisit.DateConfirmed) = Year('2013')--@DateYear)
AND  dbo.IsOnHoldEx(tblContract.OnHold, tblContractSite.OnHold, tblContract.OnHoldStartDate, tblContract.OnHoldEndDate, tblContractSite.OnHoldStartDate, tblContractSite.OnHoldEndDate) = 0  
AND tblVisit.Deleted = 0 -- make sure we dont pull through deleted visits
AND (tblContractSite.DateInactive is NULL or tblContractSite.DateInactive > GetDate()) 
GROUP BY  month(dbo.tblVisit.DateConfirmed)

ここからどこへ行けばいいのかわからないので、どんな助けでも大歓迎です!

ありがとう

4

1 に答える 1

1

CountOfPlannedVisitsでは、(あなたの場合のように) 列のエイリアスのみを参照できます。order byそれ以外の場合は、式を繰り返すか、次のようなサブクエリ テーブルを使用する必要があります。

select CountOfPlannedVisits, 
       CountOfPlannedVisitsClosed, 
       100 * CountOfPlannedVisits / CountOfPlannedVisitsClosed, ...
from (
  select some_expression as CountOfPlannedVisits ,
  some_other_expression as CountOfPlannedVisitsClosed
  ....
) a_table
....
于 2013-08-22T15:07:08.670 に答える