Sql server 具有更多连接属性的表上的连接

Sql server 具有更多连接属性的表上的连接,sql-server,Sql Server,我有一个带有应用程序(AppID,RequestDt,OrgID)的表App,一个带有分支机构名称(Branch\u id,Branch\u name)的表Wspace和员工(branchID,NmbrEmp) 这个select将返回:(我只显示了两行的示例,实际上有超过1000行) 现在我想用INFO添加下一列。此INFO位于另一个名为App2的表中,该表仅包含特定的应用程序(AppID,INFO) 我想计算表App2中信息为1的行,并将该数字放入每行的下一列 但每次它把我原来的小组搞砸了。。

我有一个带有应用程序(
AppID,RequestDt,OrgID
)的表
App
,一个带有分支机构名称(
Branch\u id,Branch\u name
)的表
Wspace
和员工(
branchID,NmbrEmp

这个select将返回:(我只显示了两行的示例,实际上有超过1000行)

现在我想用
INFO
添加下一列。此
INFO
位于另一个名为
App2
的表中,该表仅包含特定的应用程序(
AppID,INFO

我想计算表App2中信息为1的行,并将该数字放入每行的下一列

但每次它把我原来的小组搞砸了。。。这是因为App2中只有“OKApps”(还有一些应用根本不在App中),所以当我这样做时:

join App2 c on b.APPId = c.APPId
我的NOTOK应用程序将从群中消失,当我离开加入时,我的应用程序将比以前更多


感谢您的帮助

正如我在评论中所说的,您可以使用Like变量,也可以通过交叉连接添加:

DECLARE @someTable TABLE ([Date] VARCHAR(10), Branch VARCHAR(10), NmbrEmp INT, TotalApp INT, TotalAppOK INT, TotalAppNOK INT)

INSERT INTO @someTable SELECT '201402', 'Home', 5, 28, 20, 8
INSERT INTO @someTable SELECT '201402', 'Office', 4, 15, 8, 7
INSERT INTO @someTable SELECT '201403', 'Home', 5, 24, 7, 17
INSERT INTO @someTable SELECT '201403', 'Office', 4, 30, 9, 21



DECLARE @App2 TABLE (AppID INT, INFO INT)

INSERT INTO @App2 SELECT 2, 2
INSERT INTO @App2 SELECT 3, 1
INSERT INTO @App2 SELECT 4, 2

---FIRST CHOICE

DECLARE @App2Count INT = (SELECT COUNT(*) FROM @App2 WHERE INFO = 2)

SELECT Date, Branch, NmbrEmp, TotalApp, TotalAppOK, TotalAppNOK, @App2Count as App2
FROM @someTable

---SECOND CHOICE
SELECT Date, Branch, NmbrEmp, TotalApp, TotalAppOK, TotalAppNOK, A.App2 as App2
FROM @someTable sT
CROSS JOIN (SELECT COUNT(*) as App2 FROM @App2 WHERE INFO = 2) as A

您应该只计算子查询中的
Info
s,然后加入其中:

select  substring(b.RequestDt,1,6) as Date,
    a.branch_name,
    d.NmbrEmp,
    COUNT(b.AppId) as TotalApp,
    SUM(convert(int,b.OKFlg)) as TotalAppOK
    SUM(convert(int,b.NotOKFlg)) as TotalAppNOK, 
    e.C 
from    
    App b 
join Branch a on a.branch_id  = b.OrgId 
left join WSpace d on a.branch_id = d.branchID 
LEFT JOIN   
    (SELECT COUNT(*) AS C, AppID 
        FROM App2 
        WHERE Info = 1 
        GROUP BY AppId) e 
on e.AppId = b.AppId

where 
    substring(b.RequestDt,1,6) >= 201301
group by 
    substring(b.RequestDt,1,6), a.branch_name, d.NmbrEmp

为什么不在这之前只进行
COUNT
选择
并将其作为变量输入?在我处理答案时,您能否显示表格的结构?请尝试按APPID分组,并在单独的表格中进行计数,并使用APPID加入此可用结果谢谢您的提示,我会在30分钟内试用,然后让你知道。我想我解释得很糟糕。我想知道在表App2中,每个原始版本中有多少应用程序的Info=1。这意味着在第行:“201402,Home,5,28,20,8”,我已经拒绝了28个应用程序,我想知道其中有多少在表App2中,INFO=1。和in-App table是根本不在App2表中的AppID,而in-App2表是不在App表中的AppID
DECLARE @someTable TABLE ([Date] VARCHAR(10), Branch VARCHAR(10), NmbrEmp INT, TotalApp INT, TotalAppOK INT, TotalAppNOK INT)

INSERT INTO @someTable SELECT '201402', 'Home', 5, 28, 20, 8
INSERT INTO @someTable SELECT '201402', 'Office', 4, 15, 8, 7
INSERT INTO @someTable SELECT '201403', 'Home', 5, 24, 7, 17
INSERT INTO @someTable SELECT '201403', 'Office', 4, 30, 9, 21



DECLARE @App2 TABLE (AppID INT, INFO INT)

INSERT INTO @App2 SELECT 2, 2
INSERT INTO @App2 SELECT 3, 1
INSERT INTO @App2 SELECT 4, 2

---FIRST CHOICE

DECLARE @App2Count INT = (SELECT COUNT(*) FROM @App2 WHERE INFO = 2)

SELECT Date, Branch, NmbrEmp, TotalApp, TotalAppOK, TotalAppNOK, @App2Count as App2
FROM @someTable

---SECOND CHOICE
SELECT Date, Branch, NmbrEmp, TotalApp, TotalAppOK, TotalAppNOK, A.App2 as App2
FROM @someTable sT
CROSS JOIN (SELECT COUNT(*) as App2 FROM @App2 WHERE INFO = 2) as A
select  substring(b.RequestDt,1,6) as Date,
    a.branch_name,
    d.NmbrEmp,
    COUNT(b.AppId) as TotalApp,
    SUM(convert(int,b.OKFlg)) as TotalAppOK
    SUM(convert(int,b.NotOKFlg)) as TotalAppNOK, 
    e.C 
from    
    App b 
join Branch a on a.branch_id  = b.OrgId 
left join WSpace d on a.branch_id = d.branchID 
LEFT JOIN   
    (SELECT COUNT(*) AS C, AppID 
        FROM App2 
        WHERE Info = 1 
        GROUP BY AppId) e 
on e.AppId = b.AppId

where 
    substring(b.RequestDt,1,6) >= 201301
group by 
    substring(b.RequestDt,1,6), a.branch_name, d.NmbrEmp