sql获得前5位

时间:2012-06-05 13:08:35

标签: sql vertica

我有一个包含以下列的销售表:

[Date], [StoreID], [ItemID], [AmountInDollars]. for example:

06052012 | 1  | 111 | 2.35
06052012 | 1  | 222 | 5.00
06052012 | 2  | 333 | 9.99
...
01052012 | 30 | 999 | 3.98

我希望能够以这种方式选择数据:

[Date] |  [StoreID] | totalSalesForTheDay | TopSellingItemID1 | TopSellingItemID2 | TopSellingItemID3

我正在尝试以下方法:

select date,
       storeID,
       sum(AmountInDollars),
       ItemID
from sales
group by date,
       storeID,
       ItemID

这提供了当天销售的所有ItemID ...... 我怎么能够 1.仅限3个顶级项目 2.水平显示相同行中的3个顶部项目

谢谢!

根据要求 - 数据样本。这是一张原始表

Date | StoreID | ItemID | AmountInDollars
06052012 | 1  | 111 | 2.35
06052012 | 1  | 222 | 5.00
06052012 | 1  | 444 | 9.99
06052012 | 1  | 222 | 5.00
06052012 | 1  | 444 | 9.99
06052012 | 1  | 333 | 9.99
06052012 | 1  | 444 | 9.99
06052012 | 2  | 222 | 5.00
06052012 | 2  | 444 | 9.99
06052012 | 2  | 333 | 9.99
06052012 | 2  | 444 | 9.99
05052012 | 1  | 111 | 2.35
05052012 | 1  | 222 | 5.00
05052012 | 1  | 444 | 9.99
05052012 | 1  | 222 | 5.00
05052012 | 1  | 444 | 9.99
05052012 | 1  | 333 | 9.99
05052012 | 1  | 444 | 9.99
05052012 | 2  | 222 | 5.00
05052012 | 2  | 444 | 9.99
05052012 | 2  | 333 | 9.99
05052012 | 2  | 444 | 9.99

将导致:

 Date     | StoreID |totalsales |  TopSellingItemID1 |  TopSellingItemID2 |  TopSellingItemID3 
 06052012 | 1       | 52.31 | 444 | 222 | 111
 06052012 | 2       | 34.97 | 444 | 222 | 333
 05052012 | 1       | 52.31 | 444 | 222 | 111
 05052012 | 2       | 34.97 | 444 | 222 | 111

...谢谢

1 个答案:

答案 0 :(得分:0)

我不认为Vertica支持Pivot。

以下是对类似问题的回答:How do I do a Crosstab in Vertica