2016-08-24 5 views
1

Nettの最高合計に基づいてAPPROVERを返すビューを作成しようとしています。私はnettの値の合計を返すことができますが、複数の 'コード'が使用されているインスタンスがあるので、私のビューは2つ以上の行を返すことができます。最高の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として返すためには1行を返す必要があります。

私は関数を使用するルートを下げる必要があると思います。

これは意味があると思いますが、何か助けていただければ幸いです!

+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

関連する問題