2012-12-24 35 views
0

我已经
Table1 (profileName,asset status,asset_Name,BaseName)
Table 2(TITLE,Role etc)标题连接与配置文件名称
Table 3(Base_Name,Role_Id)基地联与基础名称,以表1至表1左表中获取数据
Table 4(Role ID,Rolename)角色ID链接与ROLE_ID至表3)加入四个表从

现在我想从表中的角色获得数据的基础上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(具有测试-POD的数据)

Test-POD Role1 
Test-POD Role2 

表3(具有角色ID用于测试-N)

Test-Base 95D90BD1-6A31-4CB7-895A-1CDF3FBA428D(Uid) 
Test-Base 95D90BD1-6A31-4CB7-895A-1CDF3FBA428D 
Test-Base 95D90BD1-6A31-4CB7-895A-1CDF3FBA428D 

表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 

任何帮助,将不胜感激。

+0

你得到什么错误? – Mari

+0

什么是RDBMS?如何查询不做你想要的?你想要的输出是什么?请在查询中使用它们时标记表格。 –

回答

0

不知道你想要做什么,但你可能想:

(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 
你需要包括item_date在 select条款

或删除它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 

可以在where条款去,因为没有聚合函数执行