2016-11-11 56 views
-1

以下のCASE文の正しい構文を教えてもらえますか?これは、返品価格が「返品」を含む場合、返品価格が求人テーブルの計算されたコストの半分であるところで作成しているビューの一部です。その誤った構文を言って、キーワードELSE。前もって感謝します。上記SUM SQLを使用したCASE文

`

/****** Object: View [dbo].[MMXREPORT] Script Date: 11/08/2016 14:06:29 ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

Alter view [dbo].[MMXREPORT] AS 
DECLARE @output int 
SELECT isnull(Cus.CUSTOMERNUMBER,'') AS "ACCOUNT", 
     isnull(dbo.Jobs.DELDATEANDTIME,'') as "DELIVERY DATE" , 
     isnull(dbo.Jobs.JOBREFERENCE,'') AS "MMX REFERENCE", 
     isnull(dbo.Jobs.JOBNUMBER,'') AS "INDIGO REF", 
     isnull(dbo.Jobs.COLPOSTCODE,'') AS "COLLECTION POSTCODE", 
     isnull(dbo.Jobs.DELTOWN,'') AS "DELIVERY TOWN", 
     isnull(dbo.Jobs.DELLPOSTCODE,'') AS "DELIVERY POST CODE", 
       CASE when (select count (*) from jobcharge jobc inner join charge 
       on charge.chargeid = jobc.chargeid 
       where jobc.jobid = jobs.jobid and charge.description like '%return%') > 0 THEN 'YES' 
       ELSE 'NO' END as "RETURN AUTHORISED", 
     isnull(dbo.GetClarionTime (DELREADYAT),'') AS "PLANNED DELIVERY TIME", 
     '' AS "DRIVER ARRIVAL TIME", 
     '' AS "ENGINEER ARRIVAL TIME", 
     isnull(convert(char(5), dbo.Jobs.PODDATEANDTIME, 108),'') AS"POD TIME", 
     isnull(dbo.Jobs.PODNAME,'') AS"POD NAME", 
     isnull(dbo.Vehicle.VEHICLE,'') AS "VEHICLE SIZE", 
     isnull(dbo.Jobs.ACTUALMILEAGE,'0') AS "MILEAGE", 
     isnull(dbo.Jobs.CALCULATEDCOST,'') AS "MILEAGE PRICE", 

     SELECT @output = count (*) from jobcharge jobc inner join charge 
     ON charge.chargeid = jobc.chargeid 
     WHERE jobc.jobid = jobs.jobid AND charge.description LIKE '%return%' 
     CASE WHEN @output > 0 THEN SUM(JOBS.CALCULATEDCOST/2) 
     ELSE '0.00' END 
     AS "RETURN PRICE",   
     isnull((select sum (dbo.JobCharge.FLATRATE) from jobcharge inner join charge on charge.chargeid = jobcharge.chargeid 
     WHERE dbo.Charge.DESCRIPTION like '%congestion%' and jobcharge.jobid = jobs.jobid),0) AS "CONGESTION CHARGE", 

     '' AS "CONGESTION CHARGE COMMENTS", 

     isnull((select sum (dbo.JobCharge.FLATRATE) from jobcharge inner join charge on charge.chargeid = jobcharge.chargeid 
     WHERE dbo.Charge.DESCRIPTION like '%waiting time%' and jobcharge.jobid = jobs.jobid),0) AS "WAITING TIME CHARGE", 

     '' AS "WAITING TIME COMMENTS", 

     isnull((select sum (dbo.JobCharge.FLATRATE) from jobcharge inner join charge on charge.chargeid = jobcharge.chargeid 
     WHERE dbo.Charge.DESCRIPTION like '%hrs%' and jobcharge.jobid = jobs.jobid),0) AS "ANY OTHER CHARGES", 


     '' AS "ANY OTHER COMMENTS", 
     '' AS "TOTAL COST",JOBS.CUSTOMERID 

FROM   dbo.Jobs left outer JOIN 
       dbo.Vehicle ON dbo.Jobs.VEHICLEID = dbo.Vehicle.VEHICLEID left outer JOIN 
       -- dbo.JobCharge ON dbo.Jobs.JobID = dbo.JobCharge.JOBID left outer JOIN 
       dbo.Customer CUS ON dbo.Jobs.CUSTOMERID = CUS.CUSTOMERID 

` いっぱいクエリです。

+2

によるNO 'FROM' There'n 'THEN SELECT'部分にあります。しかし、あなたが実際に何を望んでいるのかわからないので、これを修正する方法を伝えるのは難しいです。 – dnoeth

+0

クエリ全体を表示 – Mike

+0

これは完全なクエリです..... –

答えて

0

これは動作するはずです:それは不完全なクエリを思わ

DECLARE @output int 
select @output= count (*) from jobcharge jobc inner join charge 
     on charge.chargeid = jobc.chargeid 
     where jobc.jobid = jobs.jobid and charge.description like '%return%' 
CASE WHEN @output > 0 THEN SUM(JOBS.CALCULATEDCOST/2) 
     ELSE '0.00' END as "RETURN PRICE", 
0

。 "JOBS"という名前のテーブルが必要であると仮定しました。 そのためには以下を試してみてください。

SELECT 
    CASE WHEN (SELECT COUNT (*)FROM JOBCHARGE JOBC 
       INNER JOIN CHARGE ON CHARGE.CHARGEID = JOBC.CHARGEID 
       WHERE JOBC.JOBID = JOBS.JOBID 
       AND CHARGE.DESCRIPTION LIKE '%return%') > 0 
      THEN 
       SUM(JOBS.CALCULATEDCOST/2) 
      ELSE '0.00' 
    END as "RETURN PRICE" FROM JOBS 
0
、私はあなたがいくつかの行の合計が、唯一つの値を必要としないと思う

...

CASE WHEN EXISTS(
    select 1 from jobcharge jobc inner join charge 
     ON charge.chargeid = jobc.chargeid 
    WHERE jobc.jobid = jobs.jobid AND charge.description LIKE '%return% 
) THEN jobs.CALCULATEDCOST/2 ELSE 0.00 END as "RETURN PRICE", 

使用exists (select 1 ...)かもしれないよりも速くselect count() ...