2014-02-15 4 views
0

할인율이 15 % 이상인 모든 주문의 금전적 가치를 반환하는 하위 쿼리를 사용합니다. orderid과이 주문 값을 맨 위에 가장 높은 값과 함께 나열합니다.SQL 하위 쿼리 지원

계속 오류 메시지가 표시됩니다.

USE Northwind 
GO 

SELECT 
    SUM(od.orderid) As OrderID, 
    AS [Order Values] 
FROM 
    [Order Details] od 
WHERE 
    od.Discount = (SELECT od.Discount 
        FROM [Order Details] od 
        GROUP BY od.discount 
        HAVING od.discount >.15) 
GROUP BY 
    od.quantity, od.discount, od.UnitPrice 
ORDER BY 
    [Order Values] ASC; 

오류는 다음과 같습니다 'AS'키워드 근처

메시지 156, 수준 15, 상태 1, 줄 2
의 구문이 잘못되었습니다.
메시지 156, 수준 15, 상태 1, 줄 9
키워드 'GROUP'근처의 구문이 잘못되었습니다.

+2

어떤 오류가 발생합니까? – Randy

+0

메시지 156, 수준 15, 상태 1, 줄 2 키워드 'AS'근처의 구문이 잘못되었습니다. 메시지 156, 수준 15, 상태 1, 줄 9 키워드 'GROUP'근처의 구문이 잘못되었습니다. – user3313555

+0

샘플 데이터와 원하는 결과를 제공 할 수 있습니까? –

답변

0

다음 줄

는 문제가

두 번째 줄에는 AS 앞에 아무 것도 지정되어 있지 않습니다. 이전에 열 이름을 놓친 경우 또는 "AS OrderID"를 제거해야하는 경우 추가 점이 하나 있습니다. WHERE 절의 = 연산자를 IN으로 변경하십시오. 하위 쿼리가 여러 값을 반환하면 오류를 방지 할 수 있습니다.

조회에 다음과 같이 표시됩니다 od.Discount IN이 (SELECT WHERE 사용하여 Northwind이 이 [주문 정보]에서 를 AS [주문 값] SUM (od.orderid)를 선택

를 이동 중독 [주문 정보] FROM od.Discount 는 od.discount BY GROUP 중독 HAVING od.discount> .15) GROUP od.quantity, od.discount BY, od.UnitPrice ORDER [주문 버지니아 BY lues] ASC;

+0

게시물 서식을 시작하십시오. 또한 IN 대신 JOIN을 사용하는 오퍼링 쿼리를 적극 권장합니다. – ErikE

+0

응답 덕분에 몇 가지 사항을 변경하고 필요에 따라 작동시킬 수있었습니다. 아래 코드를 첨부했습니다. [Northwind를] [주문 정보]에서 SELECT od.OrderID, SUM (od.orderid) AS [순서 값] 이동 USE는 중독 WHERE od.Discount IN ([주문 정보] OD로부터 od.Discount 를 선택 od.orderID, od.quantity, od.discount, od.UnitPrice BY od.discount HAVING od.discount> .15) 그룹 ORDER [주문 값] BY DESC BY 그룹은이 모든에 감사 GO 지침과 방향. – user3313555

0

다음은 쿼리입니다 :

SELECT SUM(od.orderid) As OrderID, 
AS [Order Values] 
FROM [Order Details] od 
WHERE od.Discount = (SELECT od.Discount 
        FROM [Order Details] od 
        GROUP BY od.discount 
        HAVING od.discount >.15 
        ) 
GROUP BY od.quantity, od.discount, od.UnitPrice 
ORDER BY [Order Values] ASC; 

그것은 두 개 이상의 구문 오류가 있습니다. AS [Order Values]이 거기에 머무르고 있습니다. 틀리게. 또한 여러 행을 반환 할 가능성이 높은 하위 쿼리에 =이 있습니다. 이러한 문제를 해결 한 후에도 쿼리가 원하는 것을 수행하지 않을 것이라고 생각하지 않습니다.

편집 :

당신이 될 수 원하는 쿼리에 OrderID로 SUM (od.orderid), AS [주문 값]

을 선택 :
SELECT od.orderid, sum(od.quantity * od.UnitPrice * (1 - od.discount)) as value 
FROM [Order Details] od 
GROUP BY od.orderid 
HAVING sum(case when od.discount > 0.15 then 1 else 0 end) > 0 
ORDER BY value desc; 
+0

하위 선택 안에 'having'은 집계가 사용되지 않았으므로 실제로 필요하지 않습니다. –

+0

그는 적어도 할인 된 광고 항목이있는 전체 주문 중 합계를 원합니다. 하위 쿼리는 할인 항목이 하나 이상있는 주문의 할인되지 않은 광고 항목을 선택합니다. – ErikE

+0

@ErikE. . .좋은 해석. 원래 쿼리가 얼마나 멀리 떨어져 있는지 알지 못했습니다 ('sum (orderid)'!?!). –