source

하위 쿼리의 주문 기준 SQL 오류

manysource 2023. 4. 15. 09:04

하위 쿼리의 주문 기준 SQL 오류

SQL Server 2005를 사용하고 있습니다.

질문 내용:

SELECT (
  SELECT COUNT(1) FROM Seanslar WHERE MONTH(tarihi) = 4
  GROUP BY refKlinik_id
  ORDER BY refKlinik_id
) as dorduncuay

그리고 오류:

TOP 또는 FOR XML을 지정하지 않는 한 ORDER BY 절은 뷰, 인라인 함수, 파생 테이블, 하위 쿼리 및 일반 테이블 식에서 사용할 수 없습니다.

★★★를 어떻게 사용할 수 있습니까?ORDER BY서쿼????

다음은 오류입니다(강조).

TOP 또는 FOR XML을 지정하지 않는 한 ORDER BY 절은 뷰, 인라인 함수, 파생 테이블, 하위 쿼리 및 일반 테이블 식에서 사용할 수 없습니다.

그러면 어떻게 하면 오류를 피할 수 있을까요?TOP를 지정함으로써 하나의 가능성이 있다고 생각합니다.

SELECT (
  SELECT TOP 100 PERCENT
  COUNT(1) FROM Seanslar WHERE MONTH(tarihi) = 4
  GROUP BY refKlinik_id
  ORDER BY refKlinik_id
) as dorduncuay

SQL Server 2012 이후를 사용하는 경우 이 문제를 쉽게 해결할 수 있습니다.offset 0 rows:

SELECT (
  SELECT
  COUNT(1) FROM Seanslar WHERE MONTH(tarihi) = 4
  GROUP BY refKlinik_id
  ORDER BY refKlinik_id OFFSET 0 ROWS
) as dorduncuay

게다가 당신의 질의에 by 주문은 의미가 없는 것 같습니다.하위 선택 항목에서 주문 기준을 사용하려면 TOP 2147483647을 사용해야 합니다.

SELECT (
  SELECT TOP 2147483647
  COUNT(1) FROM Seanslar WHERE MONTH(tarihi) = 4
  GROUP BY refKlinik_id
  ORDER BY refKlinik_id
) as dorduncuay

SQL 2005부터는 "TOP 100PERT"에서 더 이상 주문을 받을 수 없는 것으로 알고 있습니다.

SQL Server 2005에서 보기 정의의 ORDER BY 절은 TOP 절에서 반환되는 행을 결정하는 데만 사용됩니다.ORDER BY 절은 쿼리 자체에 ORDER BY가 지정되지 않는 한 보기를 쿼리할 때 순서가 지정된 결과를 보장하지 않습니다.

SQL Server 2005의 변경 내용을 참조하십시오.

도움이 됐으면 좋겠어, 패트릭

임시 테이블을 작성하는 경우 ORDER BY 절을 임시 테이블 코드 블록 내부에서 외부로 이동합니다.

허용되지 않음:

SELECT * FROM (
SELECT A FROM Y
ORDER BY Y.A
) X;

허용:

SELECT * FROM (
SELECT A FROM Y
) X
ORDER BY X.A;

서브쿼리에서는 오더 by가 필요 없습니다.기본 쿼리로 이동하고 순서를 지정할 열을 하위 쿼리에 포함합니다.

다만, 당신의 문의는 카운트를 반환하고 있기 때문에, 주문의 요점을 알 수 없습니다.

하위 쿼리(내포된 보기)는 호출 쿼리에서 정렬할 수 있는 데이터 집합을 반환합니다.서브쿼리 자체를 정렬해도 호출 쿼리의 결과 순서에는 (신뢰할 수 있는) 차이가 없습니다.

SQL 자체에 대해서는 a) 단일 값을 반환하고 있기 때문에 주문을 해야 할 이유를 찾을 수 없습니다.b) 단일 값만 반환하고 있기 때문에 하위 쿼리의 이유를 알 수 없습니다.

이 문제를 해결하기 위해 저희에게 더 많은 정보가 있을 것 같습니다.

하위 쿼리에 Top 명령 추가...

SELECT 
(
SELECT TOP 100 PERCENT 
    COUNT(1) 
FROM 
    Seanslar 
WHERE 
    MONTH(tarihi) = 4
GROUP BY 
    refKlinik_id
ORDER BY 
    refKlinik_id
) as dorduncuay

:)

어쩌면 이 속임수가 도움이 될지도 모른다

SELECT
    [id],
    [code],
    [created_at]                          
FROM
    ( SELECT
        [id],
        [code],
        [created_at],
        (ROW_NUMBER() OVER (
    ORDER BY
        created_at DESC)) AS Row                                 
    FROM
        [Code_tbl]                                 
    WHERE
        [created_at] BETWEEN '2009-11-17 00:00:01' AND '2010-11-17 23:59:59'                                  
        )  Rows                          
WHERE
    Row BETWEEN 10 AND    20;

여기서 created_at 필드에 의해 정렬된 내부 서브쿼리(테이블의 임의의 서브쿼리일 수 있음)

이 예에서는 순서를 지정해도 정보가 추가되지 않습니다.순서에 관계없이 세트의 카운트는 동일합니다.

순서에 따라 다른 것을 선택하고 있는 경우는, 에러 메세지가 나타내는 몇개의 조작(TOP 또는 FOR XML 사용)을 실시할 필요가 있습니다.

하위 선택 외부로 주문 이동 시도 및 하위 선택에서 필드별 주문 추가



SELECT * FROM 

(SELECT COUNT(1) ,refKlinik_id FROM Seanslar WHERE MONTH(tarihi) = 4 GROUP BY refKlinik_id)
as dorduncuay 

ORDER BY refKlinik_id 

나에게도 이 솔루션은 정상적으로 동작합니다.

SELECT tbl.a, tbl.b
FROM (SELECT TOP (select count(1) FROM yourtable) a,b FROM yourtable order by a) tbl

안녕하세요

어떤 남자들한테는 부제목의 순서가 의심스럽죠일부 정렬에 따라 일부 레코드를 삭제해야 할 경우 하위 항목별 순서를 사용해야 합니다.맘에 들다

delete from someTable Where ID in (select top(1) from sometable where condition order by insertionstamp desc)

마지막 삽입 양식 테이블을 삭제할 수 있습니다.실제로 이 삭제에는 세 가지 방법이 있습니다.

그러나 하위 항목에서 by 순서는 많은 경우에 사용할 수 있습니다.

아래 링크의 하위 항목 검토에서 순서를 사용하는 삭제 방법에 대해

http://web.archive.org/web/20100212155407/http://blogs.msdn.com/sqlcat/archive/2009/05/21/fast-ordered-delete.aspx

도움이 됐으면 좋겠네요모두 감사합니다

OP와 같이 간단한 카운트의 경우 Order by가 꼭 필요한 것은 아닙니다.서브쿼리의 결과를 사용하고 있다면 그럴 수 있습니다.비슷한 문제를 해결하고 있는데, 아래 문의에서도 같은 오류가 발생하였습니다.

-- 비용 테이블의 행에 갱신일자가 최대 갱신일과 같은 것을 지정합니다.

    SELECT * FROM #Costs Cost
    INNER JOIN
    (
        SELECT Entityname, costtype, MAX(updatedtime) MaxUpdatedTime
        FROM #HoldCosts cost
        GROUP BY Entityname, costtype
        ORDER BY Entityname, costtype  -- *** This causes an error***
    ) CostsMax
        ON  Costs.Entityname = CostsMax.entityname
        AND Costs.Costtype = CostsMax.Costtype
        AND Costs.UpdatedTime = CostsMax.MaxUpdatedtime
    ORDER BY Costs.Entityname, Costs.costtype

--** 이를 위해 몇 가지 옵션이 있습니다.

-- 관련 없는 TOP 절을 추가합니다.이것은 약간 해킹인 것 같습니다.

    SELECT * FROM #Costs Cost
    INNER JOIN
    (
        SELECT TOP 99.999999 PERCENT Entityname, costtype, MAX(updatedtime) MaxUpdatedTime
        FROM #HoldCosts cost
        GROUP BY Entityname, costtype
        ORDER BY Entityname, costtype  
    ) CostsMax
        ON Costs.Entityname = CostsMax.entityname
        AND Costs.Costtype = CostsMax.Costtype
        AND Costs.UpdatedTime = CostsMax.MaxUpdatedtime
    ORDER BY Costs.Entityname, Costs.costtype

-- **** max Cost를 주문하기 위한 임시 테이블을 만듭니다.

    SELECT Entityname, costtype, MAX(updatedtime) MaxUpdatedTime
    INTO #MaxCost
    FROM #HoldCosts cost
    GROUP BY Entityname, costtype
    ORDER BY Entityname, costtype  

    SELECT * FROM #Costs Cost
    INNER JOIN #MaxCost CostsMax
        ON Costs.Entityname = CostsMax.entityname
        AND Costs.Costtype = CostsMax.Costtype
        AND Costs.UpdatedTime = CostsMax.MaxUpdatedtime
    ORDER BY Costs.Entityname, costs.costtype

기타 가능한 회피책으로는 CTE 또는 테이블 변수를 들 수 있습니다.그러나 각각의 상황에 따라 무엇이 가장 적합한지 결정해야 합니다.저는 임시 테이블 쪽을 먼저 보는 편이에요.나에게 그것은 명확하고 직설적이다.YMMV

서브쿼리를 주문하려면 UNION을 사용하는 경우:

모든 교사와 학생의 콜북을 생성합니다.

SELECT name, phone FROM teachers
UNION
SELECT name, phone FROM students

먼저 모든 선생님에게 표시하고 그 다음에 모든 학생이 지시하는 순서로 표시하려고 합니다.따라서 글로벌 오더를 적용할 수 없습니다.

첫 번째 순서를 강제로 지정하는 키를 포함한 다음 이름을 정렬하는 방법이 있습니다.

SELECT name, phone, 1 AS orderkey FROM teachers
UNION
SELECT name, phone, 2 AS orderkey FROM students
ORDER BY orderkey, name

나는 그것이 가짜 상쇄 서브쿼리 결과보다 훨씬 더 명확하다고 생각한다.

이 코드를 사용하여 상위 세컨드 급여를 획득합니다.

나도 다음과 같은 오류가 발생함

TOP 또는 FOR XML을 지정하지 않는 한 ORDER BY 절은 뷰, 인라인 함수, 파생 테이블, 하위 쿼리 및 일반 테이블 식에서 사용할 수 없습니다.

오류를 피하기 위해 사용한 TOP 100

* from ( tbl 을 선택합니다.Coloumn1, CONVERT(varchar, ROW_NUMBER() OVER(ORDER BY(SELECT 1)), AS Rawno from Table 1 order by Coloumn1 descript)는 tbl로 지정합니다.Rowno=

언급URL : https://stackoverflow.com/questions/985921/sql-error-with-order-by-in-subquery