Sql 连接四个表以从左表获取数据
我有Sql 连接四个表以从左表获取数据,sql,Sql,我有 表1(档案名称、资产状态、资产名称、基本名称) 表2(标题、角色等)标题通过配置文件名链接到表1 Table 3(Base\u Name,Role\u Id)Base通过BaseName链接到Table 1 表4(角色ID,Rolename)角色ID链接到表3(角色ID) 现在我想从表1中获取有关角色的数据库。 比如说 Table 1 Test-POD AVAILABLE FOR SERVICE XYLENE Test-Base Test-N AVAI
表1(档案名称、资产状态、资产名称、基本名称)
表2(标题、角色等)
标题通过配置文件名链接到表1Table 3(Base\u Name,Role\u Id)
Base通过BaseName链接到Table 1表4(角色ID,Rolename)
角色ID链接到表3(角色ID)
现在我想从表1中获取有关角色的数据库。
比如说
Table 1
Test-POD AVAILABLE FOR SERVICE XYLENE Test-Base
Test-N AVAILABLE FOR SERVICE X1 Test-Base
Test-N AVAILABLE FOR SERVICE X1 Test-Base
Test-N AVAILABLE FOR SERVICE X1 Test-Base
Test-POD UNAVAILABLE FOR SERVICE XYLENE Test-Base
Test-POD UNAVAILABLE FOR SERVICE XYLENE Test-Base
Test-POD UNAVAILABLE FOR SERVICE XYLENE Test-Base
表2(有试验吊舱数据)
表3(具有Test-N的角色id)
表4
Test-Role 95D90BD1-6A31-4CB7-895A-1CDF3FBA428D
Test-Role-POD1 DCFA3F6B-066E-4C1E-858C-652520B9BABD
Test-Role-POD EF3E9A85-E709-4CD4-8F04-8570B3CBC2CC
要根据所选角色进行筛选。已在下面的查询中尝试
SELECT
distinct(COUNT(Exception.asset_status)) AS CountOfasset_status1,
Exception.asset_name, Exception.asset_description
FROM
(((dbo.SATV_REP_EXCEPTION Exception
Left outer Join dbo.SATV_PROCEDURE_ROLE Proc_Role ON
(Exception.profile_name = Proc_Role.TITLE and
Proc_Role.ROLE_NAME='Test-Role-POD1'))
Left Outer Join dbo.SATV_COR_SCHEDULE_OCCURRENCE Sch_Occ on
Sch_Occ.BASE_NAME=Exception.BASE_NAME)
Left outer Join dbo.SATT_ROLES Roles ON
(Roles.ROLE_PK=Sch_Occ.ROLE_FK and
Roles.ROLE_NAME='Test-Role-POD1'))
WHERE
(Exception.ITEM_DATE > GETDATE() - 90) AND
(Exception.asset_status <> 'IN SERVICE')
AND Exception.BASE_NAME='Test-Base'
--AND (Proc_Role.ROLE_NAME='Test-Role-POD1' or Roles.ROLE_NAME='Test-Role-POD1')
GROUP BY
Exception.asset_name, Exception.asset_description,
ITEM_DATE
HAVING
(Exception.asset_name IS NOT NULL) AND
(asset_name <> '')
AND (COUNT(Exception.asset_status) > 2)
ORDER BY
CountOfasset_status1 DESC
选择
将(计数(异常.资产状态))作为资产状态1的计数,
Exception.asset\u名称,Exception.asset\u说明
从…起
(((dbo.SATV_REP_异常
左外部联接dbo.SATV_过程角色Proc_角色打开
(Exception.profile\u name=Proc\u Role.TITLE和
Proc_Role.Role_NAME='Test-Role-POD1'))
左外连接dbo.SATV\U COR\U时间表发生Sch\U Occ on
Sch_Occ.BASE_NAME=异常。BASE_NAME)
左外连接dbo.SATT_角色上的角色
(Roles.ROLE_PK=Sch_Occ.ROLE_FK和
Roles.ROLE_NAME='Test-ROLE-POD1'))
哪里
(Exception.ITEM_DATE>GETDATE()-90)和
(例外情况:资产状态为“在用”)
和异常。BASE_NAME='Test-BASE'
--和(Proc_Role.Role_NAME='Test-Role-POD1'或Roles.Role_NAME='Test-Role-POD1')
分组
Exception.asset\u名称,Exception.asset\u说明,
项目日期
有
(Exception.asset_name不为空)和
(资产名称“”)
和(计数(例外。资产状况)>2)
订购人
资产负债表状态1说明
任何帮助都将不胜感激。不确定您想做什么,但您可能需要:
(COUNT(distinct e.asset_status) > 2)
这会给您带来问题:
GROUP BY
e.asset_name,
e.asset_description,
ITEM_DATE
SELECT
DISTINCT(COUNT(e.asset_status)) AS CountOfasset_status1,
e.asset_name,
e.asset_description
您需要在select
子句中包含项_date,或将其从group by
子句中删除
sry,我给你的表格加了别名:
FROM
(((dbo.SATV_REP_EXCEPTION e
LEFT OUTER JOIN dbo.SATV_PROCEDURE_ROLE p ON
(e.profile_name = p.TITLE AND
p.ROLE_NAME='Test-Role-POD1'))
LEFT OUTER JOIN dbo.SATV_COR_SCHEDULE_OCCURRENCE o ON
o.BASE_NAME=e.BASE_NAME)
LEFT OUTER JOIN dbo.SATT_ROLES r ON
(r.ROLE_PK=Sch_Occ.ROLE_FK AND
r.ROLE_NAME='Test-Role-POD1'))
还有,这些东西:
HAVING
(e.asset_name IS NOT NULL) AND
(asset_name <> '') AND
具有
(e.资产名称不为空)以及
(资产名称“”)和
因为没有执行聚合函数,所以可以进入
where
子句什么RDBMS?为什么query没有做您想要的事情?你期望的输出是什么?请在查询中使用表时标记它们。
FROM
(((dbo.SATV_REP_EXCEPTION e
LEFT OUTER JOIN dbo.SATV_PROCEDURE_ROLE p ON
(e.profile_name = p.TITLE AND
p.ROLE_NAME='Test-Role-POD1'))
LEFT OUTER JOIN dbo.SATV_COR_SCHEDULE_OCCURRENCE o ON
o.BASE_NAME=e.BASE_NAME)
LEFT OUTER JOIN dbo.SATT_ROLES r ON
(r.ROLE_PK=Sch_Occ.ROLE_FK AND
r.ROLE_NAME='Test-Role-POD1'))
HAVING
(e.asset_name IS NOT NULL) AND
(asset_name <> '') AND