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