2011-09-23 51 views
1

我有一个非规范化的销售数据库是这样的:如何从SQL Server中的项目列表中只获取一行?

Invoice Item  Price Total_Sale 
------- ----  ----- ---------- 
565  Nails 1.25 6.25 
565  Hammer 5.00 6.25 
566  Paint 7.95 7.95 
... 

正如你所看到的,“total_sale”在发票重复每个行项目。发票#565有两个项目,总共$ 6.25。发票#566只有一件商品,总价为7.95美元。这两张发票的总额(total_sale)应该是14.20美元。

问:有没有简单的方法来获得所有列*只是一个一行对每个不同的发票吗?无论发票是否有一个,两个或一百个订单项?

+0

表示你想得到像565 total_sale 12.50一样的结果,对吗? –

+1

@ paulsm4 - 你在这里需要什么**。我的回答解决了你所问的具体问题,但并不确定你为什么要这样做,而且可能有更好的方法。 –

回答

3

问:是否有任何简单的方法可以让每个不同发票的 只有一行*?

WITH T AS 
(
SELECT 
     Invoice, 
     Item, 
     Price, 
     Total_Sale, 
     ROW_NUMBER() OVER (PARTITION BY Invoice ORDER BY (SELECT 0)) AS RN 
FROM YourTable 
) 
SELECT 
     Invoice, 
     Item, 
     Price, 
     Total_Sale 
FROM T 
WHERE RN=1; 
1

简单查询将是:

Select SUM(Price), Invoice, Total_Sale From InvoicesTable 
Group By Invoice, Total_Sale 
Order By Invoice 

项列不能被包括作为组通过将产生的多个行。

相关问题