2016-08-24 4 views
1

Nett의 합계가 가장 큰 것을 기준으로 APPROVER를 반환하는보기를 만들려고합니다. nett 값의 합계를 반환 할 수 있지만 여러 '코드'가 사용되는 인스턴스가 있으므로 내보기에서 둘 이상의 행을 반환 할 수 있습니다. 요구 사항은 가장 높은 Nett를 기준으로 APPROVER를 반환하는 것입니다. 항상 단지 내가 원하는 세부 행을 반환 할 수 있도록그룹의 최대 값을 반환합니다.

CREATE VIEW UDF_APPROVER 
AS 
WITH UDF_BUDGAPPROVER (_ID , USERID , Nett , ANALYSIS) 
AS 
(
ISNULL(HEADER_PRIMARY,0) '_ID', 
INITIATOR_ID as 'USERID', 
SUM(NETT) AS 'Nett', 
ANALYSIS 
FROM ORDER_HEADER 
JOIN ORDER_DETAIL ON HEADER_PRIMARY = HEADER_LINK 
GROUP BY 
HEADER_PRIMARY, 
INITIATOR_ID 
ANALYSIS 
) 

SELECT 
Nett , 
__PR_ID , 
__USER_ID , 
NCATEGORYCODE5 AS 'APPROVER' , 
CODE , 
FROM GENERAL_ACCOUNTS 
JOIN UDF_BUDGAPPROVER ON CODE = ANALYSIS 
WHERE _ID = 15 

results

이 GUI는 _ID로 전달됩니다 :

여기 내보기입니다.

1-2102-60이 Nett가 가장 높기 때문에 APPROVER를 TR01로 반환하려면 하나의 행을 반환해야합니다.

나는 함수를 사용하는 길로 갈 필요가 있다고 생각한다.

나는 이것이 의미가 있기를 바랍니다, 어떤 도움을 주시면 감사하겠습니다!

+0

문제를 개선하는 방법에 여기에서 확인하시기 바랍니다 ... HTTPS : //spaghettidba.com/2015/04/24/how-to-post-at- sql-questions-on-a-public-forum/ – TheGameiswar

+0

일부 샘플 데이터와 예상 출력을 게시하십시오. – StackUser

+0

클라이언트 데이터이기 때문에 까다로운 일일 수 있습니다. 첨부 된 스크린 샷에서 1 행에 APPROVER 만보고 싶습니다. 돈 가치 및 분석이 포함 된 주문 헤더 (1 행), 세부 행 (1 행 이상)이 3 개 있습니다. 표 3에는 APPROVER가 포함되어 있으며 분석은 코드의 테이블에 조인하는 데 사용됩니다. – DeanS

답변

0

당신은 다음과 같이 시도 할 수

CREATE VIEW UDF_APPROVER 
AS 
WITH UDF_BUDGAPPROVER (
    _ID 
    ,USERID 
    ,Nett 
    ,ANALYSIS 
    ) 
AS (
    ISNULL(HEADER_PRIMARY, 0) '_ID' 
    ,INITIATOR_ID AS 'USERID' 
    ,SUM(NETT) AS 'Nett' 
    ,ANALYSIS FROM ORDER_HEADER 
    JOIN ORDER_DETAIL ON HEADER_PRIMARY = HEADER_LINK 
    GROUP BY HEADER_PRIMARY 
     ,INITIATOR_ID ANALYSIS 
    ) 
SELECT MAX(Nett) AS Nett 
    ,__PR_ID 
    ,__USER_ID 
    ,NCATEGORYCODE5 AS 'APPROVER' 
    ,CODE 
FROM GENERAL_ACCOUNTS 
JOIN UDF_BUDGAPPROVER ON CODE = ANALYSIS 
WHERE _ID = 15 
GROUP BY __PR_ID 
    ,__USER_ID 
    ,NCATEGORYCODE5 
    ,CODE 
+0

APPROVER가 뚜렷하지 않아 그룹화 할 수 없기 때문에 작동하지 않을 것이라고 생각합니다. – DeanS

관련 문제