2016-09-27 2 views
0

テーブルを返すselect文があります。私はテーブルを返すselectステートメントの一部として、テーブル値関数を選択したい。どのようにそれを行う。SQL Serverのselect文の一部としてテーブル値関数を使用する方法

これは、これは私がgrouppathとして

SELECT 
    dbo.TC_User.JobTitle, dbo.TC_User.UserID, 
    dbo.GetGroupPath2Clone('465') as grouppath, 
    dbo.TC_User.LocalID, dbo.TC_User.NokiaID, dbo.TC_User.NameCN, 
    dbo.TC_User.职阶 as EmployeeGroup, 
    dbo.TC_User2.LockDateID, dbo.TC_User.StartDate, 
    dbo.TC_User.EndDate, dbo.TC_User.StartDateN, 
    dbo.TC_User.聘用前工号, dbo.TC_User.NoCheckFlag, 
    dbo.GetGroupPath2('465') AS Path 
FROM 
    dbo.TC_User 
INNER JOIN 
    dbo.TC_User2 ON dbo.TC_User.UserID = dbo.TC_User2.UserID 
WHERE 
    (dbo.TC_User.UserID IN (SELECT UserID 
          FROM dbo.TC_User 
          WHERE (GroupID IN (SELECT GroupID 
               FROM dbo.VSGetSubGroupTab(10, 1) AS VSGetSubGroupTab)))) 

dbo.GetGroupPath2Clone('465')欲しいものであるテーブル

SELECT 
    dbo.TC_User.JobTitle, dbo.TC_User.UserID, 
    dbo.TC_User.LocalID, dbo.TC_User.NokiaID, dbo.TC_User.NameCN, 
    dbo.TC_User.职阶 as EmployeeGroup, 
    dbo.TC_User2.LockDateID, dbo.TC_User.StartDate, 
    dbo.TC_User.EndDate, dbo.TC_User.StartDateN, 
    dbo.TC_User.聘用前工号, dbo.TC_User.NoCheckFlag, 
    dbo.GetGroupPath2('465') AS Path 
FROM 
    dbo.TC_User 
INNER JOIN 
    dbo.TC_User2 ON dbo.TC_User.UserID = dbo.TC_User2.UserID 
WHERE 
    (dbo.TC_User.UserID IN (SELECT UserID 
          FROM dbo.TC_User 
          WHERE (GroupID IN (SELECT GroupID 
               FROM dbo.VSGetSubGroupTab(10, 1) AS VSGetSubGroupTab)))) 

を返す私のセレクトコードで、私は呼びたいテーブル値関数です。どうやってするか?

+0

が見えます。同様に、SELECT/WHERE/ONのFROM/JOIN節とそのカラムで 'dbo.GetGroupPath2Clone( '465')'を使用します。 – Serg

+0

あなたが既に持っている答えの他に、あなたは 'OUTER APPLY'と' CROSS APPLY'を読んでいるかもしれません – Shnugo

+0

@Sergこんにちは、dbo.VSGetSubGroupTab(10、1)はwhere句の中で使われ、存在するか否かを判断する。しかし、fordbo.GetGroupPath2Clone( '465')私はそれによって返された列をメインテーブルに追加したいと思います。どうやってするか?ありがとう –

答えて

0

dbo.GetGroupPath2はスカラー関数のようです。ただし、表関数の場合は、結合リストに配置する必要があります。表関数を作成するための

SELECT 
dbo.TC_User.JobTitle, dbo.TC_User.UserID, 
dbo.TC_User.LocalID, dbo.TC_User.NokiaID, dbo.TC_User.NameCN, 
dbo.TC_User.职阶 as EmployeeGroup, 
dbo.TC_User2.LockDateID, dbo.TC_User.StartDate, 
dbo.TC_User.EndDate, dbo.TC_User.StartDateN, 
dbo.TC_User.聘用前工号, dbo.TC_User.NoCheckFlag, 
tf.yourfield1, tf.yourfield2, ...etc. 
FROM 
dbo.TC_User 
join dbo.GetGroupPath2('465') AS tf on tf.yourkey=somekeys 
INNER JOIN 
dbo.TC_User2 ON dbo.TC_User.UserID = dbo.TC_User2.UserID 
WHERE 
(dbo.TC_User.UserID IN (SELECT UserID 
         FROM dbo.TC_User 
         WHERE (GroupID IN (SELECT GroupID 
              FROM dbo.VSGetSubGroupTab(10, 1) AS VSGetSubGroupTab)))) 

:あなたはすでに他のテーブル値関数 `dbo.VSGetSubGroupTab(10、1)`を使用しているよう

CREATE FUNCTION [dbo].GetGroupPath2 
(
    @Parm varchar(10) 
) 
Returns Table 
As 
Return (
    Select yourfield1, yourfield2 
    From yourTable 
    where [yourKey] = @Parm 
) 
関連する問題