像這樣也許:
with cte as (
select base = 1 + u + t*3 from (
select 0 as u union all select 1 union all select 2
) T1
cross join (
select 0 as t union all select 1 union all select 2
) T2
), data as (
select *
from (
values (1,1,2,3,3,5,7,4,2,1)
) data(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9)
)
select cte.base
,case when x0>=base then 'X' else ' ' end as x0
,case when x1>=base then 'X' else ' ' end as x1
,case when x2>=base then 'X' else ' ' end as x2
,case when x3>=base then 'X' else ' ' end as x3
,case when x4>=base then 'X' else ' ' end as x4
,case when x5>=base then 'X' else ' ' end as x5
,case when x6>=base then 'X' else ' ' end as x6
,case when x7>=base then 'X' else ' ' end as x7
,case when x8>=base then 'X' else ' ' end as x8
,case when x9>=base then 'X' else ' ' end as x9
from cte
cross join data
order by base desc
;
這很好地得到這個柱狀圖:
base x0 x1 x2 x3 x4 x5 x6 x7 x8 x9
----------- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
9
8
7 X
6 X
5 X X
4 X X X
3 X X X X X
2 X X X X X X X
1 X X X X X X X X X X
記住你的數據第一樞軸成一行。
對於更簡潔的演示文稿,將各種數據列連接成單個長字符串。
「* ..將所有價格拆分爲100個同等大小(基於價格)的桶。*」要做到這一點,您需要確定(或需要一些規則來確定)這些價格範圍100桶。 – RBarryYoung 2013-04-28 22:29:02
我的理解是,PERCENT_RANK給了我們一個集合中某個值的百分比位置。在這種情況下,價值是價格,該集合是2012年4月26日的所有記錄。乘以100並將其轉換爲int可以有效地將每個值放入100個桶中的一箇中。 – user1044169 2013-04-29 03:31:06
這只是與NTILE做相同的事情,只是相反。如果您希望100 *價格*子範圍具有相同的寬度,那麼您必須從範圍/規則開始以確定其總寬度並將其除以100.這是簡單的數學運算。我們需要你決定這個範圍/規則是什麼。 – RBarryYoung 2013-04-29 09:58:59