하위 쿼리에서 정렬 기준이있는 SQL 오류
SQL Server 2005를 사용하고 있습니다.
내 질문은 다음과 같습니다.
SELECT (
SELECT COUNT(1) FROM Seanslar WHERE MONTH(tarihi) = 4
GROUP BY refKlinik_id
ORDER BY refKlinik_id
) as dorduncuay
그리고 오류 :
ORDER BY 절은 TOP 또는 FOR XML도 지정되지 않는 한 뷰, 인라인 함수, 파생 테이블, 하위 쿼리 및 공통 테이블 식에서 유효하지 않습니다.
ORDER BY
하위 쿼리에서 어떻게 사용할 수 있습니까?
이것은 당신이 얻는 오류입니다 (강조 표시).
ORDER BY 절은 TOP 또는 FOR XML도 지정되지 않는 한 뷰, 인라인 함수, 파생 테이블, 하위 쿼리 및 공통 테이블 식에서 유효하지 않습니다 .
그렇다면 오류를 어떻게 피할 수 있습니까? TOP을 지정하면 하나의 가능성이 될 것 같습니다.
SELECT (
SELECT TOP 100 PERCENT
COUNT(1) FROM Seanslar WHERE MONTH(tarihi) = 4
GROUP BY refKlinik_id
ORDER BY refKlinik_id
) as dorduncuay
order by가 쿼리에서 의미가없는 것 같습니다 .... sub select에서 order 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
내 이해는 "TOP 100 PERCENT"가 SQL 2005부터 더 이상 주문을 보장하지 않는다는 것입니다.
SQL Server 2005에서 뷰 정의의 ORDER BY 절은 TOP 절에서 반환하는 행을 확인하는 데만 사용됩니다. ORDER BY 절은 ORDER BY가 쿼리 자체에 지정되지 않는 한 뷰를 쿼리 할 때 정렬 된 결과를 보장하지 않습니다.
도움이 되었기를 바랍니다, Patrick
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
하위 쿼리에서 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
:)
아마도이 트릭이 누군가를 도울 것입니다
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 필드로 정렬 된 내부 하위 쿼리 (테이블의 임의의 항목 일 수 있음)
이 예에서 순서는 정보를 추가하지 않습니다. 세트의 COUNT는 순서에 관계없이 동일합니다!
당신이 뭔가를 선택한다면 않은 사용 TOP 또는 FOR XML을 - 순서에 의존을, 당신은 오류 메시지를 알 수있는 것들 중 하나를 수행해야합니다
하위 쿼리 (중첩 된 뷰)는 호출 쿼리에서 주문할 수있는 데이터 세트를 반환합니다. 하위 쿼리 자체를 정렬하면 호출 쿼리의 결과 순서에 (신뢰할 수있는) 차이가 없습니다.
SQL 자체에 관해서는 : a) 단일 값을 반환하므로 주문할 이유가 없습니다. b) 어쨌든 단일 값만 반환하므로 하위 쿼리에 대한 이유가 없습니다.
여기에 문제를 해결하기 위해 알려주고 싶은 정보가 더 많이 있다고 생각합니다.
임시 테이블을 빌드하는 경우 임시 테이블 코드 블록 내부에서 외부로 ORDER BY 절을 이동합니다.
허용되지 않음 :
SELECT * FROM (
SELECT A FROM Y
ORDER BY Y.A
) X;
허용됨 :
SELECT * FROM (
SELECT A FROM Y
) X
ORDER BY X.A;
order by 절을 sub select 외부로 이동하고 sub select에서 order by 필드를 추가하십시오.
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
좋은 날
어떤 사람들에게는 하위 쿼리의 순서가 의심 스럽습니다. 정렬에 따라 일부 레코드를 삭제해야하는 경우 하위 쿼리의 order by를 사용해야합니다. 처럼
delete from someTable Where ID in (select top(1) from sometable where condition order by insertionstamp desc)
마지막 삽입 양식 테이블을 삭제할 수 있습니다. 실제로이 삭제를 수행하는 세 가지 방법이 있습니다.
그러나 하위 쿼리의 order by는 많은 경우에 사용될 수 있습니다.
아래 링크에서 하위 쿼리 검토에서 order by를 사용하는 삭제 방법
i hope it helps. thanks you all
I Use This Code To Get Top Second Salary
I am Also Get Error Like
The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP or FOR XML is also specified.
TOP 100 I Used To Avoid The Error
select * from ( select tbl.Coloumn1 ,CONVERT(varchar, ROW_NUMBER() OVER (ORDER BY (SELECT 1))) AS Rowno from ( select top 100 * from Table1 order by Coloumn1 desc) as tbl) as tbl where tbl.Rowno=2
For a simple count like the OP is showing, the Order by isn't strictly needed. If they are using the result of the subquery, it may be. I am working on a similiar issue and got the same error in the following query:
-- I want the rows from the cost table with an updateddate equal to the max updateddate:
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
-- *** To accomplish this, there are a few options:
-- Add an extraneous TOP clause, This seems like a bit of a hack:
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
-- **** Create a temp table to order the maxCost
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
Other possible workarounds could be CTE's or table variables. But each situation requires you to determine what works best for you. I tend to look first towards a temp table. To me, it is clear and straightforward. YMMV.
On possible needs to order a subquery is when you have a UNION :
You generate a call book of all teachers and students.
SELECT name, phone FROM teachers
UNION
SELECT name, phone FROM students
You want to display it with all teachers first, followed by all students, both ordered by. So you cant apply a global order by.
One solution is to include a key to force a first order by, and then order the names :
SELECT name, phone, 1 AS orderkey FROM teachers
UNION
SELECT name, phone, 2 AS orderkey FROM students
ORDER BY orderkey, name
I think its way more clear than fake offsetting subquery result.
참고URL : https://stackoverflow.com/questions/985921/sql-error-with-order-by-in-subquery
'UFO ET IT' 카테고리의 다른 글
Composer : file_put_contents (./ composer.json) : 스트림을 열지 못했습니다 : 권한이 거부되었습니다. (0) | 2020.11.22 |
---|---|
무작위로 생성 된 UUID에서 "-"를 제거하는 것이 얼마나 안전합니까? (0) | 2020.11.22 |
iPhone OSStatus 코드를 유용한 것으로 어떻게 변환합니까? (0) | 2020.11.22 |
HTTP 오류 404.3-IIS 7.5에서 찾을 수 없음 (0) | 2020.11.22 |
GET 매개 변수를위한 SpringMVC RequestMapping (0) | 2020.11.22 |