t报告SQL中的UP-Down指示灯



-销售表

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)

最新更新