ORDER BY 절이 뷰, 인라인 함수, 파생된 테이블, 하위 쿼리 및 일반 테이블 식에 유효하지 않습니다.
TOP, OFFSET 또는 FOR XML을 지정하지 않는 한 ORDER BY 절은 뷰, 인라인 함수, 파생 테이블, 하위 쿼리 및 일반 테이블 식에서 사용할 수 없습니다.
아래 쿼리를 실행하려고 하면 위의 오류가 발생합니다.제가 뭘 잘못하고 있는지 누가 좀 봐주시겠어요?
SELECT
*
FROM (
SELECT
Stockmain.VRNOA,
item.description as item_description,
party.name as party_name,
stockmain.vrdate,
stockdetail.qty,
stockdetail.rate,
stockdetail.amount,
ROW_NUMBER() OVER (ORDER BY VRDATE) AS RowNum
FROM StockMain
INNER JOIN StockDetail
ON StockMain.stid = StockDetail.stid
INNER JOIN party
ON party.party_id = stockmain.party_id
INNER JOIN item
ON item.item_id = stockdetail.item_id
WHERE stockmain.etype='purchase'
ORDER BY VRDATE DESC
) AS MyDerivedTable
WHERE
MyDerivedTable.RowNum BETWEEN 1 and 5
사용할 필요가 없습니다.ORDER BY
에 대한 내밀한 질문에서WHERE
clause는 이미 사용하였기 때문에ROW_NUMBER() OVER (ORDER BY VRDATE DESC)
.
SELECT
*
FROM (
SELECT
Stockmain.VRNOA,
item.description as item_description,
party.name as party_name,
stockmain.vrdate,
stockdetail.qty,
stockdetail.rate,
stockdetail.amount,
ROW_NUMBER() OVER (ORDER BY VRDATE DESC) AS RowNum --< ORDER BY
FROM StockMain
INNER JOIN StockDetail
ON StockMain.stid = StockDetail.stid
INNER JOIN party
ON party.party_id = stockmain.party_id
INNER JOIN item
ON item.item_id = stockdetail.item_id
WHERE stockmain.etype='purchase'
) AS MyDerivedTable
WHERE
MyDerivedTable.RowNum BETWEEN 1 and 5
ORDER BY column OFFSET 0 ROWS
의외로 작동하는데, 정말 이상한 기능이네요.
긴 쿼리를 일시적으로 "저장"하여 나중에 재주문하는 방법으로서 CTE를 사용한 더 큰 예:
;WITH cte AS (
SELECT .....long select statement here....
)
SELECT * FROM
(
SELECT * FROM
( -- necessary to nest selects for union to work with where & order clauses
SELECT * FROM cte WHERE cte.MainCol= 1 ORDER BY cte.ColX asc OFFSET 0 ROWS
) first
UNION ALL
SELECT * FROM
(
SELECT * FROM cte WHERE cte.MainCol = 0 ORDER BY cte.ColY desc OFFSET 0 ROWS
) last
) as unionized
ORDER BY unionized.MainCol desc -- all rows ordered by this one
OFFSET @pPageSize * @pPageOffset ROWS -- params from stored procedure for pagination, not relevant to example
FETCH FIRST @pPageSize ROWS ONLY -- params from stored procedure for pagination, not relevant to example
그래서 우리는 모든 결과를MainCol
하지만 그 결과는MainCol = 1
명령을 받다ColX
그리고 그 결과는MainCol = 0
명령을 받다ColY
제 경우 "Inline Table-Value User Defined Function"을 사용하여 주문을 수행하려고 했습니다.그리고 나는 예외보다 낮아지고 있었다.
TOP, OFFSET 또는 FOR XML을 지정하지 않는 한 ORDER BY 절은 뷰, 인라인 함수, 파생 테이블, 하위 쿼리 및 일반 테이블 식에서 사용할 수 없습니다.
솔루션 I을 Multiline Statement Table-Values Function으로 변경하여 동작하기 시작했습니다.
이렇게 하려면 SQL에서 데이터를 바로 반환하지 않고
- 테이블 변수와 열을 정의했습니다.
- 내 UDF 본체에서 데이터를 채웠다.
- 돌아가다
제 경우 select top xyz를 추가하는 것이 효과가 있었습니다.
언급URL : https://stackoverflow.com/questions/18031421/the-order-by-clause-is-invalid-in-views-inline-functions-derived-tables-subqu
'programing' 카테고리의 다른 글
matplotlib 범례 추가 (0) | 2023.04.22 |
---|---|
숫자에서 0을 제거하는 중 (0) | 2023.04.22 |
T-SQL에서 날짜/시간을 문자열로 변환하는 방법 (0) | 2023.04.17 |
Excel VBA를 사용하여 MS Access 테이블로 데이터 내보내기 (0) | 2023.04.17 |
디렉토리가 bash로 마운트되었는지 확인합니다. (0) | 2023.04.17 |