如何从SQL Server中的项目列表中只获取一行?

时间:2011-09-23 20:37:47

标签: sql 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美元。

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

2 个答案:

答案 0 :(得分: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 :(得分:1)

一个简单的查询是:

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

不能包含item列作为group by会产生多行。