2017-11-25 17 views
0

PVという名前の関数を作成しました。最小のコストでv_idと表示されます。今度はその関数を呼び出して、SQLにSQL Serverで新しい関数内の関数を呼び出す方法2014

p_name, p_description, QH associated 

とこれをv_idと表示したいと思います。私の質問は私がそれをどうやって行うのだろうか?

  • Tb1を:P(P_ID(PK)、P_NAMEチャー(60)、p_descriptionのVARCHAR(300)、QH(INT)
  • Tb2の

    私のテーブルは私の機能コードとともに以下の通りであります: VP(vp_id(PK)、コスト、P_ID(FK)、v_id(FK))

  • TB3:V(v_id(PK)、v_name)

コード:

CREATE FUNCTION PV (@ptid AS INT) 
RETURNS INT 
AS 
BEGIN 
    DECLARE @vid AS INT 
    DECLARE @min AS INT 

    SELECT 
     ptid = VP.P_ID, @vid = VP.V_ID, 
     @min = MIN(VP.COST) 
    FROM 
     VPr 
    GROUP BY 
     VP.P_ID, VP.V_ID 
    HAVING 
     MIN(VP.COST) < 25 

    RETURN @vid 
END; 
GO 

注::ptidの入力を9としてこの関数を実行すると、正しいv_idが返されます。繰り返す:私はp_name、p_description、およびqhと一緒にその関数を呼びたいと思います。

私はSQL関数を初めて使用しています。親切に私に説明を教えてください。

ありがとうございます!

答えて

1

は、これはあなたが探しているものをやるん:

SELECT 
    p_name 
    , p_description 
    , qh 
    , v_id 
FROM 
    (
     SELECT 
      P.p_name 
      , P.p_description 
      , P.qh 
      , vp.v_id 
      , ROW_NUMBER() OVER (ORDER BY vp.cost) R 
     FROM 
      P 
      JOIN vp ON P.p_id = vp.p_id 
     WHERE vp.v_id = dbo.PV(9) -- you may need to alter the schema from 'dbo' 
    ) Q 
WHERE R = 1 
+0

あなたは機能が異なるスキーマに、例えば格納されている場合 – biggboss2019

+0

「あなたは 『DBO』からスキーマを変更する必要があるかもしれません」について詳しく説明してくださいすることができます'DatabaseName.dbo.PV'ではなく、' DatabaseName.Functionality.PV'などである可能性があります。その場合は 'Functionality.PV'を指定します。 –

+0

ありがとう!上記のコードを試しました。しかし、上記のコードでは、1つのv_id結果を表示する代わりに、2つのv_id結果が表示されます。私は2つの異なるp_nameに1つのv_id INSERTEDを持っています。どのようにこれを修正するための任意の提案? – biggboss2019

関連する問題