2012-11-14 46 views
0

我有两个表,其中包含两种不同类型的发票。我需要创建一个查询,从两个表中统计每个客户端的发票数量。如何连接两个没有任何关系的表?

此外,每个发票类型还有其他表格,这些表格包含关于将JOIN语句添加到每个SELECT语句的发票的信息。但这两张表格不共享任何详细的发票表格。

所以这就是模式的样子: invoiceA与serviceInvoice和invoiceDetail有关系。 invoiceB与packageInvoice和supportInvoice有关系。

我没有包含任何JOIN,但这是我的查询看起来像什么的粗略想法。

SELECT 
    i.client_id, COUNT(i.invoice_num) 
FROM 
(
    SELECT client_id, invoice_num, cff_num FROM invoiceA 
    UNION 
    SELECT client_id, invoice_num, cff_num FROM invoiceB 
)i 
WHERE 
    i.cff_num IS NULL 
GROUP BY 
    i.client_id 

该查询似乎不可思议,效率低下,我想做一个留在invoiceB加入,但也有具有两个表中相同的行CLIENT_ID。有什么我可以做的,以优化这个?

+1

您使用的RDBMS是什么? – Taryn

+0

我正在使用MS-SQL – samwell

+5

该查询看起来既不奇怪也不低效。 –

回答

0

这些信息存储在一个视图,你可以从它只要你喜欢选择:

SELECT 
    client_id, 
    COUNT(*) AS 'count' 
FROM invoiceA 
WHERE 
    cff_num IS NULL 
GROUP BY 
    client_id 

UNION 

SELECT 
    client_id, 
    COUNT(*) AS 'count' 
FROM invoiceB 
WHERE 
    cff_num IS NULL 
GROUP BY 
    client_id