我有一个非标准化的销售数据库,如下所示:
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 :(得分: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会产生多行。