我有2张桌子
订单明细:
Id Name type Quantity
------------------------------------------
2009 john a 10
2009 john a 20
2010 sam b 25
2011 sam c 50
2012 sam d 30
ValueDetails :
Id Value
-------------------
2009 300
2010 500
2011 200
2012 100
我需要获得一个显示数据的输出:
Id Name type Quantity Price
-------------------------------------------------
2009 john a 10
2009 john a 20 9000
2010 sam b 25
2011 sam c 50
2012 sam d 30 25500
价格按价值x数量计算,价值总和显示在给定名称的最后一个重复行中。
我厌倦了使用sum和group by但我只得到了两行。我需要显示所有5行。我该如何撰写此查询?
答案 0 :(得分:0)
SELECT a.ID,
a.Name,
a.Type,
a.quantity,
price = (a.quantity * b.price)
FROM OrderDetails a LEFT JOIN
ValueDetails b on a.id = b.id
这将把价格放在每一行。如果您想通过ID,名称和类型进行SUM,则不会显示您在上面显示的各个记录。如果你想在一个共享相同的Id,Name和Type的行上放置一个SUM,那么你需要一个规则来确定哪个,然后你可以使用CASE语句来决定你在哪一行想要显示SUM总数。
答案 1 :(得分:0)
您可以使用Row_Number和Row_Number的最大值来获得此格式化的总和
;with cte as (
select od.*, sm= sum( od.Quantity*vd.value ) over (partition by Name),
RowN = row_number() over(partition by Name order by od.id)
from #yourOrderDetails od
inner join #yourValueDetails vd
on od.Id = vd.Id
)
select Id, Name, Type, Quantity,
case when max(RowN) over(partition by Name) = row_number() over(partition by Name order by Id)
then sm else null end as ActualSum
from cte
您的输入表格:
create table #yourOrderDetails (Id int, Name varchar(20), type varchar(2), Quantity int)
insert into #yourOrderDetails (Id, Name, type, Quantity) values
(2009 ,'john','a', 10 )
,(2009 ,'john','a', 20 ) ,(2010 ,'sam ','b', 25 )
,(2011 ,'sam ','c', 50 ) ,(2012 ,'sam ','d', 30 )
create table #yourValueDetails(Id int, Value Int)
insert into #yourValueDetails(Id, value) values
( 2009 , 300 ) ,( 2010 , 500 )
,( 2011 , 200 ) ,( 2012 , 100 )