Sql server SQL:如何选择另一个表';if-select语句中的行?

Sql server SQL:如何选择另一个表';if-select语句中的行?,sql-server,tsql,if-statement,select,join,Sql Server,Tsql,If Statement,Select,Join,我正在为公司的树制作这样的存储过程 有两张桌子。tb_部门和tb_公司。 表的数据如下所示 tb_dept CompanyCode DeptCode DisplayName ParentDeptCode DeptEmail DisplayYN SortOrder H101 1A07 RnD 1000 RnD@test.com

我正在为公司的树制作这样的存储过程

有两张桌子。tb_部门和tb_公司。 表的数据如下所示

tb_dept 
CompanyCode    DeptCode    DisplayName    ParentDeptCode    DeptEmail                DisplayYN    SortOrder  
H101           1A07        RnD            1000              RnD@test.com             Y             0
H101           1907        Solution       1000              Solution@test.com        Y             0
H101           1A34        Management     1000              Management@test.com      Y             0
H101           1000        CEO            org               ceo@test.com             Y             0

tb_Company
CompanyCode    CompanyName    GIDCode
H101           TestIT         1000
K101           DevelopeIT     1001 
S101           AnalysisIT     1024
DeptCode    DeptName    HasSubDept    DeptEmail    CompanyCode    CompanyName 
H101        TestIT      0                          H101           TestIT     
H101        CEO         0                          H101           TestIT     
首先,如果选择语句,结果如下

DeptCode    DeptName    HasSubDept    DeptEmail    CompanyCode    CompanyName 
H101        TestIT      0                          H101           TestIT     
USE TestChart
GO
DECLARE @companyCode    varchar(20)
    ,   @parentDeptCode varchar(20)
    ,   @isRelative     bit
    ,   @langCode       varchar(20)

SELECT @companyCode     = 'H101'
       ,@parentDeptCode =  ''
       ,@isRelative     = 0
       ,@langCode       = 'ko'


IF @parentDeptCode IS NULL OR @parentDeptCode = '' 
    BEGIN
        SELECT
                CompanyCode AS DeptCode
            ,   CompanyName AS DeptName
            ,   dbo.uf_HasChildDept(CompanyCode) AS HasSubDept
            ,   '' AS DeptEmail
            ,   CompanyCode
            ,   CompanyName
        FROM dbo.tb_Company
        WHERE CompanyCode = @companyCode
    END 
ELSE
    BEGIN
        SELECT
            D.DeptCode
        ,   ISNULL(D.DisplayName, '') AS DeptName
        ,   dbo.uf_HasChildDept(D.DeptCode) AS HasSubDept
        ,   D.DeptEmail
        ,   C.CompanyCode
        ,   C.CompanyName
        FROM dbo.tb_Dept D WITH (NOLOCK)
        INNER JOIN dbo.tb_Company C WITH (NOLOCK)
        ON C.CompanyCode = @companyCode
        WHERE D.ParentDeptCode = @parentDeptCode
        AND D.DisplayYN = 'Y'
        AND c.CompanyCode = d.CompanyCode
        ORDER BY D.SortOrder
    END
我想加上这个结果

DeptCode    DeptName    HasSubDept    DeptEmail    CompanyCode    CompanyName 
H101        CEO         0                          H101           TestIT     
所以,最后第一个If-select语句的结果是这样的

tb_dept 
CompanyCode    DeptCode    DisplayName    ParentDeptCode    DeptEmail                DisplayYN    SortOrder  
H101           1A07        RnD            1000              RnD@test.com             Y             0
H101           1907        Solution       1000              Solution@test.com        Y             0
H101           1A34        Management     1000              Management@test.com      Y             0
H101           1000        CEO            org               ceo@test.com             Y             0

tb_Company
CompanyCode    CompanyName    GIDCode
H101           TestIT         1000
K101           DevelopeIT     1001 
S101           AnalysisIT     1024
DeptCode    DeptName    HasSubDept    DeptEmail    CompanyCode    CompanyName 
H101        TestIT      0                          H101           TestIT     
H101        CEO         0                          H101           TestIT     
是的,我知道这看起来很奇怪,但我必须这样做

如何修改first if语句或添加其他代码

请有人帮帮我。下面是我的存储过程

DeptCode    DeptName    HasSubDept    DeptEmail    CompanyCode    CompanyName 
H101        TestIT      0                          H101           TestIT     
USE TestChart
GO
DECLARE @companyCode    varchar(20)
    ,   @parentDeptCode varchar(20)
    ,   @isRelative     bit
    ,   @langCode       varchar(20)

SELECT @companyCode     = 'H101'
       ,@parentDeptCode =  ''
       ,@isRelative     = 0
       ,@langCode       = 'ko'


IF @parentDeptCode IS NULL OR @parentDeptCode = '' 
    BEGIN
        SELECT
                CompanyCode AS DeptCode
            ,   CompanyName AS DeptName
            ,   dbo.uf_HasChildDept(CompanyCode) AS HasSubDept
            ,   '' AS DeptEmail
            ,   CompanyCode
            ,   CompanyName
        FROM dbo.tb_Company
        WHERE CompanyCode = @companyCode
    END 
ELSE
    BEGIN
        SELECT
            D.DeptCode
        ,   ISNULL(D.DisplayName, '') AS DeptName
        ,   dbo.uf_HasChildDept(D.DeptCode) AS HasSubDept
        ,   D.DeptEmail
        ,   C.CompanyCode
        ,   C.CompanyName
        FROM dbo.tb_Dept D WITH (NOLOCK)
        INNER JOIN dbo.tb_Company C WITH (NOLOCK)
        ON C.CompanyCode = @companyCode
        WHERE D.ParentDeptCode = @parentDeptCode
        AND D.DisplayYN = 'Y'
        AND c.CompanyCode = d.CompanyCode
        ORDER BY D.SortOrder
    END

您应该使用
UNION ALL

如果需要,可以在
WHERE
子句中包含
@parentDeptCode为NULL或@parentDeptCode='
条件

SELECT
        CompanyCode AS DeptCode
    ,   CompanyName AS DeptName
    ,   dbo.uf_HasChildDept(CompanyCode) AS HasSubDept
    ,   '' AS DeptEmail
    ,   CompanyCode
    ,   CompanyName
FROM dbo.tb_Company
WHERE CompanyCode = @companyCode

UNION ALL

SELECT
        D.DeptCode
    ,   ISNULL(D.DisplayName, '') AS DeptName
    ,   dbo.uf_HasChildDept(D.DeptCode) AS HasSubDept
    ,   D.DeptEmail
    ,   C.CompanyCode
    ,   C.CompanyName
FROM dbo.tb_Dept D WITH (NOLOCK)
INNER JOIN dbo.tb_Company C WITH (NOLOCK) ON C.CompanyCode = D.CompanyCode
WHERE (ISNULL(@parentDeptCode, '') = '' AND D.ParentDeptCode = 'org') OR D.ParentDeptCode = @parentDeptCode)
    AND D.DisplayYN = 'Y'
    AND C.CompanyCode = @companyCode
ORDER BY D.SortOrder

在您的示例中,您使用的是deptname“TestIT”,但根据您的示例数据,“TestIT”是一家公司。在我的情况下,您的答案非常接近!谢谢你帮助我。