-销售表
ID | Sales
-------------
1 | 100
-------------
2 | 110
-------------
3 | 120
-------------
4 | 130
-------------
5 | 100
-------------
6 | 90
-------------
7 | 80
-------------
8 | 90
-------------
9 | 100
-------------
10 | 110
-------------
11 | 70
-------------
12 | 80
-------------
13 | 90
-------------
14 | 100
-------------
15 | 110
-------------
16 | 80
-------------
--输出表
FromID | ToID | SalesIndicator
-------------------------------------------------
1 | 4 | UP
-------------------------------------------------
4 | 7 | Down
-------------------------------------------------
7 | 10 | UP
-------------------------------------------------
10 | 11 | Down
-------------------------------------------------
11 | 15 | UP
-------------------------------------------------
15 | 16 | Down
-------------------------------------------------
如你所见,我有两张桌子。我想要的销售表和产量。输出表包含三列FromID、ToID和SalesIndicator。
让我们以第一行为例。在ID 1到ID 4的销售额表中,销售额正在增加,因此指标为Up。
让我们以第二行为例。在ID 4到ID 7的销售额表中,销售额正在下降,因此指标为"下降"。
请帮我写一个代码,使用sales表填充输出表。
谢谢,阿卡什
这是一个棘手的问题。我喜欢为它写查询。我已经添加了一个答案,不是最好的一个,但我很乐意发布这个。请检查:
;WITH T AS (
SELECT
*, ID IDA, 1 CNT, 1 UPD
FROM YourTable where ID=1
UNION ALL
SELECT
b.*,
T.ID,
(case when T.Sales<b.Sales then t.CNT else T.CNT+1 end),
(case when T.Sales<b.Sales then 1 else 0 end)
from YourTable b INNER JOIN T on b.ID=T.ID+1
)
,x as(
select
*,
case when UPD=0 then ID-CNT else CNT end ToGroup
From T
)
SELECT
MIN(IDA) FromID,
MAX(ID) ToID,
CASE WHEN UPD=1 then 'Up' else 'Down' end SalesIndicator
FROM x
GROUP BY UPD, ToGroup
ORDER BY MIN(IDA)