我在数据库的查询数据中遇到问题,无法在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”(是的,如果它们具有不同的值,我将显示“未定义”),“数量” “(相同项目的总和)和”金额“(同一项目的总和)。但我试过几次,结果是错的。如果他们的“单价”根本不是同一个价格,如何计算所有相同项目的“金额”。这是我的预期结果:
___________________________________________________________________________
| | | | | | |
| 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 |
|____|_______________|__________|_____________|___________|_______________|
请帮助我....
答案 0 :(得分:6)
如果我理解正确,这应该做你想要的:
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
答案 1 :(得分:2)
请尝试使用此代码,
select Id, item, unit, sum(quantity) totoal_Qt ,
sum(amount) total_Px from td
group by id, item, unit
;
结果:
ID ITEM UNIT TOTOAL_QT TOTAL_PX
1 Gasoline L 90 539.9
2 Water Bottle 10 50
3 Meat Kg 15 223.5
4 Milk Can 30 223.5
这是我能得到的最接近的。这是一个很好的问题。为此+1。所以这个编辑答案的缺陷就是它会显示一个多个unit_prices
项目的“Undefined”,但是即使一个项目的multipel条目具有相同unit_price
。答案是完整的ANSI
语法。
更改样本数据以测试各种情况。
ID ITEM UNIT UNIT_PRICE QUANTITY AMOUNT
1 Gasoline L 2 10 20
1 Gasoline L 2.5 20 50
2 Water Bottle 5 10 50
3 Meat Kg 14.9 15 223.5
1 Gasoline L 8 50 400
4 Milk Can 7.45 30 223.5
1 Gasoline L 6.99 10 69.9
2 Water Bottle 5 10 49.9
查询:
select distinct x.id, x.item, x.unit,
x.total_Qt, x.total_Amt,
case when x.unitPrice = 0
then 'Undefined'
else cast(y.unit_price as varchar(9))
end as UP
from(
select Id, item, unit, sum(quantity) total_Qt ,
sum(amount) total_Amt,
case when count(unit_price)>1
then 0
else 1
end unitPrice
from td
group by id, item, unit) as x
left join
(select distinct id, item, unit, unit_price
from td) as y
on x.id = y.id
and x.item = y.item
and x.unit = y.unit
;
结果:
ID ITEM UNIT TOTAL_QT TOTAL_AMT UP
1 Gasoline L 90 539.9 Undefined
2 Water Bottle 20 99.9 Undefined
3 Meat Kg 15 223.5 14.90
4 Milk Can 30 223.5 7.45