Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在不生成多行的情况下从1个表查询多个条件_Sql_Sql Server 2008_Tsql_Join_Conditional Statements - Fatal编程技术网

Sql 在不生成多行的情况下从1个表查询多个条件

Sql 在不生成多行的情况下从1个表查询多个条件,sql,sql-server-2008,tsql,join,conditional-statements,Sql,Sql Server 2008,Tsql,Join,Conditional Statements,我正在使用的数据库(我没有能力更新或修改其中的任何内容,我只需要查询我正在创建的报告)是以一种非常奇怪的方式设置的。有时信息需要一百万个中间表才能访问,而有时所有信息都在同一个表中 为了获得所需的唯一地址,我必须将3个表(包含发票信息的表与包含为每个组织分配编号的键的表与包含数据库中所有组织的表)连接起来。三个表中的最后一个表包含每个公司,但公司可以具有相同的不同角色(例如,一个公司可以是供应商,一个公司可以是客户,一个公司可以是合作伙伴等),因此该表有一个“类型”列,其中1=供应商,2=客户,

我正在使用的数据库(我没有能力更新或修改其中的任何内容,我只需要查询我正在创建的报告)是以一种非常奇怪的方式设置的。有时信息需要一百万个中间表才能访问,而有时所有信息都在同一个表中

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

下面是示例代码和数据(抱歉,我无法在此处正确设置表格格式):

数据:

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

有人能帮忙吗


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

这会让您更接近您想要的结果吗

;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

如果您在其他角色中有多个条目,您将在各个角色列中获得重复的记录

听起来您在角色数据库中有重复的记录,而公司的角色为空。或者,您的查询实际上使用了左/右外部联接。您可以检查这些内容吗?如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码示例”按钮(
{}
),以很好地格式化和语法突出显示它+1以请求表结构和示例代码。另外,我想指出的是,你面临的问题相当普遍,并不“奇怪”。拥有三个表仅仅意味着DB被设计为处理多对多关系(尽管我发现一个订单可以属于多个客户这一点很奇怪)。如果您使用(几乎)任何数据库,通过关系映射表连接两个信息表是您经常会发现的事情。需要更多关于如何连接表的信息。你能给我们相关的表格格式吗?
a.OrderID    b.Organization    c.Role
-----------------------------------------    
   123       Acme Inc.            1
   123       Roadrunner Inc.      2
   123       Venture Co.          2
;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