我在从数据库查询数据以在VB.NET中进行报告时遇到问题。我使用业务对象来做报告。这是我的示例数据:
___________________________________________________________________________
| | | | | | |
| Id | Item | Unit | Unit Price | Quantity | Amount |
|____|_______________|__________|_____________|___________|_______________|
| 1 | Gasoline | L | $ 2.00 | 10 | $ 20.00 |
| 1 | Gasoline | L | $ 2.50 | 20 | $ 50.00 |
| 2 | Water | Bottle | $ 5.00 | 10 | $ 50.00 |
| 3 | Meat | Kg | $ 14.90 | 15 | $ 223.50 |
| 1 | Gasoline | L | $ 8.00 | 50 | $ 400.00 |
| 4 | Milk | Can | $ 7.45 | 30 | $ 223.50 |
| 1 | Gasoline | L | $ 6.99 | 10 | $ 69.90 |
|____|_______________|__________|_____________|___________|_______________|
在报告中,我想查看“Id”,“Item”,“Unit”,“Unit Price”(是的,如果值不同,我将显示“Undefined”),“Quantity”(总和)相同的项目)和“金额”(同一项目的总和)。但是我尝试了几次,结果是错误的。如果它们的“单价”根本不是相同的价格,那么如何计算所有“相同”的“金额”。这是我的预期结果:
___________________________________________________________________________
| | | | | | |
| Id | Item | Unit | Unit Price | Quantity | Amount |
|____|_______________|__________|_____________|___________|_______________|
| 1 | Gasoline | L | Undefined | 90 | $ 539.90 |
| 2 | Water | Bottle | $ 5.00 | 10 | $ 50.00 |
| 3 | Meat | Kg | $ 14.90 | 15 | $ 223.50 |
| 4 | Milk | Can | $ 7.45 | 30 | $ 223.50 |
|____|_______________|__________|_____________|___________|_______________|
请帮我....
最佳答案
如果我对您的理解正确,这应该可以做你想要的:
SELECT A.Id,
A.Item,
A.Unit,
CASE WHEN B.Id IS NOT NULL THEN 'Undefined' ELSE [Unit Price] END [Unit Price],
A.Quantity,
A.Amount
FROM ( SELECT Id, Item, Unit,
CAST(MIN([Unit Price]) AS VARCHAR(20)) [Unit Price],
SUM(Quantity) Quantity, SUM(Amount) Amount
FROM YourTable
GROUP BY Id, Item, Unit) A
LEFT JOIN ( SELECT Id
FROM YourTable
GROUP BY Id
HAVING COUNT(DISTINCT [Unit Price]) > 1) B
ON A.Id = B.Id
添加了一个sql fiddle供您尝试。 (感谢@bonCodigo,因为我的提琴是基于他已经拥有的提琴,但是带有我的代码)。
结果如下:
ID ITEM UNIT PRICE QUANTITY AMOUNT
1 Gasoline L Undefined 90 539.9
2 Water Bottle 5.00 20 99.9
3 Meat Kg 14.90 15 223.5
4 Milk Can 7.45 30 223.5
关于sql - 如何从SQL Server查询数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14043162/