我写了这个查询
select CustomerNo, Bill
from table A p
left join table B m
p.ID = m.CustomerID
where substring (CustomerNo, 11,9) = '09' 'This shows total CustomerNo for year 2009
and Bill <> '' ' like suppose 257 rows
如何在此查询中添加行号?和升序票据价值? 如何找到奇数甚至行数的中位数值?
答案 0 :(得分:1)
请参阅此相关问题:Function to Calculate Median in Sql Server
以下是有关ROW_NUMBER()的语法信息:http://msdn.microsoft.com/en-us/library/ms186734.aspx
对于您的查询,ROW_NUMBER列将如下所示:
ROW_NUMBER() OVER (ORDER BY Bill ASC) as 'RowNumber'
答案 1 :(得分:1)
我希望我理解你的问题是正确的。你写的sql有点模糊。 我试图修复你的sql,它永远不会像写的那样运行,左连接已经死了。我完全按照你的描述编写了sql。如果你想要不同的东西,你应该提供更多信息,如testdata和预期结果。
declare @a table(id int, CustomerNo varchar(20))
declare @b table(bill varchar(20), customerid int, billvalue money)
insert @a values(1, 'abcdefghij09')
insert @b values('a', 1,3.5)
insert @b values('b', 1,42)
insert @b values('c', 1,5)
insert @b values('d', 1,6)
insert @b values('e', 1,2)
;with a as (
select CustomerNo, Bill,billvalue,ROW_NUMBER() OVER (ORDER BY Billvalue ASC) rownumber
from @A p
left join @B m
on p.ID = m.CustomerID
and m.Bill <> ''
where
substring (p.CustomerNo, 11,2) = '09'
), b as
(
select top 2 billvalue, isodd from (select top 50 percent billvalue, rownumber %2 isodd from a order by billvalue) a order by billvalue desc
)
select * from a --- last codeline
这将解决您的第一个问题
要获得奇数和偶数行的中位数,请将最后一行代码替换为
select * from b
要使medians成为整个sql的一部分,请用以下代码替换最后一行代码:
select *, (select billvalue from b where isodd = 0) evenmedianbillvalue,
(select billvalue from b where isodd = 1) oddmedianbillvalue
from a order by billvalue
结果:
CustomerNo, Bill billvalue rownumber evenmedianbillvalue oddmedianbillvalue
abcdefghij09 e 2 1 3.5 5
abcdefghij09 a 3.5 2 3.5 5
abcdefghij09 c 5 3 3.5 5
abcdefghij09 d 6 4 3.5 5
abcdefghij09 b 42 5 3.5 5