2014-04-29 3 views
0

여러 테이블에서 데이터를 가져 와서 데이터를 가져 오는 동안 나이를 계산하려고하는데 라운드를 사용하여 나이를 계산할 수 없습니다.MySQL : 구문이 잘못되었습니다. 'ROUND'

제안이 유용 할 것입니다. 당신이 ROUND의 결과가 당신의 결과 집합에 포함하려면

SELECT client.ClientNumber 
     , client.ClientActive AS Active 
     , invoice.ClientNumber 
     , invoice.InvoiceDate AS InvoiceDate 
     , invoicedetail.InvoiceNumber AS Invoice 
     , invoicedetail.ClientNumber 
     , invoicedetail.Extended AS Cost 
     , invoicedetail.ServiceDate AS Serviced 
    FROM 
     dbo.client 
     INNER JOIN dbo.invoice 
     ON client.ClientNumber = invoice.ClientNumber 
     INNER JOIN dbo.invoicedetail 
     ON invoice.ClientNumber = invoicedetail.ClientNumber 
    WHERE 
     client.ClientActive = 'Y' 
    GROUP BY 
     client.ClientNumber 
    , client.ClientActive 
    , invoice.ClientNumber 
    , invoice.InvoiceDate 
    , invoicedetail.InvoiceNumber 
    , invoicedetail.ServiceDate 
    , invoicedetail.Extended 
    , invoicedetail.ClientNumber 
    , invoicedetail.ClientNumber 
    ORDER BY 
     InvoiceDate 

    ROUND(DATEDIFF(hour,CASE WHEN [InvoiceDate]>= GETDATE() THEN NULL ELSE [InvoiceDate] END, getdate())/8766.0,2) AS [ClientAge], 
      (CASE WHEN ROUND(DATEDIFF(hour,CASE WHEN [InvoiceDate]>= GETDATE() THEN NULL ELSE [InvoiceDate] END, getdate())/8766.0,2)< 0.5 THEN '0-5 months'   
        WHEN ROUND(DATEDIFF(hour,CASE WHEN [InvoiceDate]>= GETDATE() THEN NULL ELSE [InvoiceDate] END, getdate())/8766.0,2) BETWEEN 0.5 AND 0.99 THEN '6-11 months' 
        WHEN ROUND(DATEDIFF(hour,CASE WHEN [InvoiceDate]>= GETDATE() THEN NULL ELSE [InvoiceDate] END, getdate())/8766.0,2) BETWEEN 1 AND 5.99 THEN '1-5 years' 
        WHEN ROUND(DATEDIFF(hour,CASE WHEN [InvoiceDate]>= GETDATE() THEN NULL ELSE [InvoiceDate] END, getdate())/8766.0,2) BETWEEN 6 AND 10.99 THEN '6-10 years' 
        WHEN ROUND(DATEDIFF(hour,CASE WHEN [InvoiceDate]>= GETDATE() THEN NULL ELSE [InvoiceDate] END, getdate())/8766.0,2) BETWEEN 11 AND 15.99 THEN '11-15 years' 
        WHEN ROUND(DATEDIFF(hour,CASE WHEN [InvoiceDate]>= GETDATE() THEN NULL ELSE [InvoiceDate] END, getdate())/8766.0,2)>=16 THEN '16+ years' 
       END) as [ClientAgeGroup]  
+1

왜 'ROUND입니다 (...)'거기 있니? 그게 뭐야? 왜 * ORDER BY 이후입니까? 또한,'InvoiceDate' 주위에'[]'가있는 것은 무엇입니까? –

+1

'ROUND()'는 순서에서 고려해야 할 사항입니까? 그런 다음 쉼표가 누락되었습니다. 그렇지 않으면, 거기에 ROUND()가 무엇입니까? –

+0

년을 계산하는 데 도움이되는 round를 사용하려고합니까? – user3586979

답변

1

, 당신은 SELECT 후 필드 목록으로 이동해야합니다

SELECT client.ClientNumber 
    , client.ClientActive AS Active 
    , invoice.ClientNumber 
    , invoice.InvoiceDate AS InvoiceDate 
    , invoicedetail.InvoiceNumber AS Invoice 
    , invoicedetail.ClientNumber 
    , invoicedetail.Extended AS Cost 
    , invoicedetail.ServiceDate AS Serviced 
    , ROUND(DATEDIFF(hour,CASE WHEN InvoiceDate>= GETDATE() THEN NULL ELSE InvoiceDate END, getdate())/8766.0,2) AS [ClientAge], 
     (CASE WHEN ROUND(DATEDIFF(hour,CASE WHEN InvoiceDate>= GETDATE() THEN NULL ELSE InvoiceDate END, getdate())/8766.0,2)< 0.5 THEN '0-5 months'   
       WHEN ROUND(DATEDIFF(hour,CASE WHEN InvoiceDate>= GETDATE() THEN NULL ELSE InvoiceDate END, getdate())/8766.0,2) BETWEEN 0.5 AND 0.99 THEN '6-11 months' 
       WHEN ROUND(DATEDIFF(hour,CASE WHEN InvoiceDate>= GETDATE() THEN NULL ELSE InvoiceDate END, getdate())/8766.0,2) BETWEEN 1 AND 5.99 THEN '1-5 years' 
       WHEN ROUND(DATEDIFF(hour,CASE WHEN InvoiceDate>= GETDATE() THEN NULL ELSE InvoiceDate END, getdate())/8766.0,2) BETWEEN 6 AND 10.99 THEN '6-10 years' 
       WHEN ROUND(DATEDIFF(hour,CASE WHEN InvoiceDate>= GETDATE() THEN NULL ELSE InvoiceDate END, getdate())/8766.0,2) BETWEEN 11 AND 15.99 THEN '11-15 years' 
       WHEN ROUND(DATEDIFF(hour,CASE WHEN InvoiceDate>= GETDATE() THEN NULL ELSE InvoiceDate END, getdate())/8766.0,2)>=16 THEN '16+ years' 
      END) as [ClientAgeGroup] 
FROM 
    dbo.client 
    INNER JOIN dbo.invoice 
    ON client.ClientNumber = invoice.ClientNumber 
    INNER JOIN dbo.invoicedetail 
    ON invoice.ClientNumber = invoicedetail.ClientNumber 
WHERE 
    client.ClientActive = 'Y' 
GROUP BY 
    client.ClientNumber 
, client.ClientActive 
, invoice.ClientNumber 
, invoice.InvoiceDate 
, invoicedetail.InvoiceNumber 
, invoicedetail.ServiceDate 
, invoicedetail.Extended 
, invoicedetail.ClientNumber 
, invoicedetail.ClientNumber 
ORDER BY 
    InvoiceDate 
+1

'[InvoiceDate]'주변에서'[]'를 잃습니다. 그것은 MySQL이 아닌 다른 SQL 변형입니다. –

관련 문제