2011-04-12 33 views
0

我想为输入的人员获取数据,我想为特定人员提取数据为No of invoices和No of line items。在SQL Server中有多个表的多个集合函数

输出是

Entered_by No of line items 
CD    9 
CD    136084 
deepa    7 
deepa    18 
dolly    757 
dolly    22350 
kroshni   666 
kroshni   16161 
lokesh   4 
lokesh   999 
MHeera   639 
MHeera    20427 
nandini   7 
nandini   5318 

这里的数据没有订单项被混合的两个“无行项目”和计数“的发票不”,我想告诉喜欢

Entered_by No of line items No of invoices 
CD    136084    9 
deepa    18    7 
dolly    22350    757 

请帮我这个人... ..

这里是T-SQL查询

select ENTERED_BY, count(entered_by) 'NO OF LINE ITEMS' 
from im_invoice, im_invoice_line_item, im_invoice_inventory 
where invoice_rid = invoice_fk 
and invoice_inventory_rid = invoice_inv_fk 
and enter_date between dateadd(mm, -3, getdate()) and dateadd(mm,0,getdate()) 
group by entered_by 

union 

select entered_by, count(invoice_num) 'NO OF INVOICES' from im_invoice 
where enter_date between dateadd(mm, -3, getdate()) and dateadd(mm,0,getdate()) 
group by entered_by 
+0

您能澄清三张表之间的关系吗?哪些表“invoice_rid”,“invoice_fk”,“invoice_inventory_rid”和“invoice_inv_fk”属于? – 2011-04-12 14:43:45

回答

1

乔说,如果你给我们一个更详细的描述,我们可以给你更好的答案,但在那之前,快速和肮脏的方式来完成,这是如下:

  1. 摆脱工会
  2. 将2个查询转换为派生表
  3. 从中选择加入entered_by。

例如,

SELECT LineItems.ENTERED_BY, [NO OF LINE ITEMS], [NO OF INVOICES] 
FROM 
(SELECT ENTERED_BY,COUNT(entered_by) 'NO OF LINE ITEMS' 
FROM im_invoice, im_invoice_line_item,im_invoice_inventory 
WHERE invoice_rid = invoice_fk 
AND invoice_inventory_rid = invoice_inv_fk 
AND enter_date BETWEEN dateadd(mm, -3, getdate()) AND dateadd(mm,0,getdate()) 
GROUP BY entered_by) AS LineItems 
INNER JOIN 
(SELECT entered_by, count(invoice_num) 'NO OF INVOICES' 
FROM im_invoice 
WHERE enter_date BETWEEN dateadd(mm, -3, getdate()) AND dateadd(mm,0,getdate()) 
GROUP BY entered_by) AS invoices 
ON invoices.entered_by = LineItems.ENTERED_BY