【问题标题】:how to do subquery with 3 tables and using where clause in multi values?如何使用 3 个表进行子查询并在多值中使用 where 子句?
【发布时间】:2014-09-11 07:15:07
【问题描述】:

我想对 3 个表进行子查询,并在多值中使用 where,但我总是遇到语法错误。我必须在 Report Builder 3.0 中进行报告

表 A:record_id、姓氏、名字

表 C:row_id、能力代码、能力名称

台式电脑:link_id、record_id、row_id、attainment_date

我想将这些表合并为 1 个表。一个人将完成一些能力代码,并且与其他人不同。根据 attainment_date 完成能力代码。我还认为将 iff 函数用于能力代码值中的 attainment_date 作为完成/是。

我要创建的表是:

Record_Id | Surname | GivenName | Code 1   | Code 2    | Code 3    | Code 4   |  Code 5
01        |  AA     |   AA      | Complete | Complete  | Complete  |          | Complete
02        |  BB     |   BB      | Complete | Complete  |           | Complete |
03        |  CC     |   CC      |          | Complete  | Complete  |          | Complete 

这是我尝试做的查询。

    select distinct a.id, a.surname, a.given_name
    from all a
    join 
    (
     select pc.attainment_date
     from personnel_competency pc  
     join
     (
      select c.code, c.name 
      from competency c)
      competency c on (c.row_no = pc.linkid)
     )
     personnel_competency pc on (pc.id = a.id)

     where c.code in ('ABC', 'BCD', 'ABE', 'DEA', 'DEF', 'POS', 'SAQ', 'LOP')
     and pc.attainment_date < now()
     order by a.record_id

我的 SQL 技能非常基础。是否还有其他方法可以制作这样的表格?

【问题讨论】:

    标签: reporting-services subquery where-clause ssrs-2008-r2 reportbuilder3.0


    【解决方案1】:

    您是否正在寻找 SQL 来获得结果。如果是这样,我认为这就是您要寻找的东西.. 如果您发布一些示例数据会有所帮助。

    您可以在以下位置对其进行测试 SQLFiddle

    这是脚本..

    -- Generate schema and data 
    create table tableA (id int, surname varchar(30), given_name varchar(30));
    create table tablePC (link_id int, id int, attainment_date datetime);
    create table tableC (row_id int, competency_code varchar(20), Competency_name varchar(30));
    
    insert into tableA (id, surname, given_name)
    values (1, 'AA', 'AAgn')
    , (2, 'BB', 'BBgn')
    
    insert into tablePC (link_id, id, attainment_date)
    values (1, 1, '2014-09-11')
    , (2, 1, '2014-09-10')
    , (3, 2, '2014-09-11')
    
    insert into tableC (row_id, competency_code, Competency_name)
    values (1, 'ABC', 'completed\Yes')
    , (1, 'BCD', 'completed')
    , (1, 'ABE', 'completed')
    , (2, 'ABC', 'completed')
    , (2, 'BCD', 'completed')
    , (3, 'ABC', 'completed')
    , (3, 'ABE', 'completed')
    -- ===============
    
    select *
    from tableA TA
        inner join tablePC PC
        on TA.id = PC.id
        inner join
        (
            select row_id, [ABC] as ABC, [BCD] as BCD, [ABE] as ABE
            from tableC TC
            pivot
            (
                max(Competency_name)
                for Competency_code in ([ABC], [BCD], [ABE])
            ) as TCPVT
        ) TC    
        on PC.link_id = TC.row_id
    where PC.attainment_date < GETDATE()
    

    【讨论】:

    • 是的,我需要 SQL 语句来创建表。枢轴附近的语法不正确。
    • sqlfiddle.com/#!3/e92ab/1 我已经在 SQLFiddle 尝试过,但仍然有语法错误。
    • 您创建的脚本中有一些错误(很好的尝试)。请先了解您的数据。 PC.link_id = Tc.row_id 之间的数据链接无法建立,因为根据您的数据没有任何匹配项,因此不会返回任何数据。其次,请研究 SQL 语法以了解如何构建查询。已更新Your sqlfiddle.com/#!3/e92ab/64
    猜你喜欢
    • 2017-06-26
    • 1970-01-01
    • 2015-11-18
    • 2018-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多