在多个条件下从1个表查询而不生成多行

时间:2012-07-29 15:56:31

标签: sql sql-server-2008 tsql join conditional-statements

我正在使用的数据库(我无法更新或修改其中的任何内容,我只能查询我正在创建的报告)是以一种相当奇怪的方式设置的。有时,信息需要一百万个中间表才能到达它,有时候一切都在同一个表中。

要获取我需要的唯一地址,我必须加入3个表(包含发票信息的表到表,该表包含为每个组织分配一个编号的密钥到包含数据库中所有组织的表)。这三个表中的最后一个表有每个公司,但公司可以具有相同的不同角色(例如,一个公司可以是供应商,一个可以是客户,一个可以是合作伙伴等),因此表中有一个“类型”列表示角色,其中1 =供应商,2 =客户等

示例代码和数据如下(抱歉,我似乎无法在此处正确格式化表格):

select * from a
join b on a.id=b.id
join c on b.orgid=c.orgid

数据:

a.OrderID    b.Organization    c.Role
-----------------------------------------    
   123       Acme Inc.            1
   123       Roadrunner Inc.      2
   123       Venture Co.          2

我正在进行的查询需要提取订单ID,供应商,客户和合作伙伴,但无论我如何加入它或如何尝试使用WITH语句,它都会生成3行,每行line,三个角色中的一个被命名,其余角色为NULL。

有人能帮忙吗?

非常感谢您花时间阅读这个冗长的问题。

1 个答案:

答案 0 :(得分:0)

这是否能让您更接近理想的结果

;with cteOrgRoles as
(
select b.id, b.orgid, organization, role
from b 
    inner join c on b.orgid = c.orgid
)
    select 
        a.*,
        r1.organization as role1,
        r2.organization as role2
    from a
        left join cteOrgRoles r1 on a.id = r1.id and r1.role=1
        left join cteOrgRoles r2 on a.id = r2.id and r2.role=2

如果您在其他角色中有多个条目

,您将在各种角色列中获得重复项