Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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 server 2005 Crystal Reports SQL Server多表和外部联接_Sql Server 2005_Crystal Reports_Join - Fatal编程技术网

Sql server 2005 Crystal Reports SQL Server多表和外部联接

Sql server 2005 Crystal Reports SQL Server多表和外部联接,sql-server-2005,crystal-reports,join,Sql Server 2005,Crystal Reports,Join,我想做一份报告,展示顾客购买的产品。 我有Products,TransDetails,TransHeaders,客户表格,我必须挑选所有产品,并且对于每个产品,我必须显示每个客户的销售额如果客户尚未购买任何特定产品,则该产品仍应显示在销售为0的报告中。用户应该能够为特定客户或客户组运行此报告。 我现在面临的问题是,如果我在sql查询中包含customers表,那么它只显示客户购买的产品,而不显示客户尚未购买的产品 SELECT Products.SalesCategory, Products.

我想做一份报告,展示顾客购买的产品。 我有
Products
TransDetails
TransHeaders
客户
表格,我必须挑选所有产品,并且对于每个产品,我必须显示每个客户的销售额如果客户尚未购买任何特定产品,则该产品仍应显示在销售为0的报告中。用户应该能够为特定客户或客户组运行此报告。 我现在面临的问题是,如果我在sql查询中包含customers表,那么它只显示客户购买的产品,而不显示客户尚未购买的产品

SELECT  Products.SalesCategory, Products.ProductCode, Products.ProductTitle, Customers.CustomerCode, Transdetails.quantity
    From    Products left outer join Transdetails on Products.ProductID= Transdetails.ProductID
            Left Outer Join Customers on Customers.CustomerId= Transdetails.CustomerID
    Where SalesCategory like 'XYZ' and Products.Status like 'A' 
    and customers.customercode like 'BEST'
    order by SalesCategory, ProductCode, ProductTitle

这似乎是因为您的
Where
子句包含了对
customers.customercode的选择,如“BEST”
——这实质上将客户的外部连接转化为内部连接

要选择SalesCategory为“XYZ”且状态为“A”的所有产品,以及customercode为“BEST”的客户销售,请尝试以下操作:

SELECT  Products.SalesCategory, Products.ProductCode, Products.ProductTitle, Transcust.CustomerCode, Transcust.quantity
From    Products left outer join 
        (SELECT Customers.CustomerCode, Transdetails.ProductID, Transdetails.quantity
         FROM   Transdetails 
         Join   Customers on Customers.CustomerId= Transdetails.CustomerID
         WHERE  customers.customercode like 'BEST') Transcust
        on Products.ProductID= Transcust.ProductID
Where SalesCategory like 'XYZ' and Products.Status like 'A' 
order by SalesCategory, ProductCode, ProductTitle

通过删除product和transaction details表之间的链接,我已经解决了这个问题,因此我选择了所有产品并选择了所有客户的交易。

@shahsali:对于更多的表,应该可以采用类似的方法-为什么不编辑您的问题以包括完整的查询,最好包括参数?另外,您可以包括您正在使用的Crystal的哪个版本吗?感谢mark,我已经找到了解决方案,删除了产品和交易表之间的链接。虽然报告的时间比正常情况下长。。谢谢你的帮助。