通过动态将行转换为列来获取给定天数的数据

时间:2015-10-04 13:16:45

标签: sql postgresql crosstab

这是我之前提问的后续问题:Get records for last 10 dates

我必须通过传递storeId为商店的所有图书生成报告以及最后 N 日期的已售出计数(如果有)。

   BOOK               Book Sold                   Store
 ------------        --------------------        ---------------- 
 Id  Name  SID     Id Bid Count Date            SID  Name
  1   ABC   1      1   1   20  11/12/2015        1    MNA
  2   DEF   1      2   1   30  12/12/2015        2    KLK
  3   DF2   2      3   2   20  11/12/2015        3    KJH
  4   DF3   3      4   3   10  13/12/2015
  5   GHB   3      5   4    5  14/12/2015

N 的天数由用户提供。这是storeId -1,2&的最后4个日期的预期输出。 3。

 BookName  11/12/2015 12/12/2015  13/12/2015  14/12/2015
  ABC         20        30         --             --    
  DEF         20        --         --             -- 
  DF2         --        --         10             -- 
  DF3         --        --         --              5
  GHB         --        --         --             --

如果用户通过 5 ,则应生成过去5天的数据,开始日期为2015年12月14日。

我正在使用Postgres 9.3。

1 个答案:

答案 0 :(得分:-1)

没有交叉表功能的交叉表:

SELECT
SUM(CASE book.Date ='11/11/2015' THEN book.Count ELSE 0 END) AS '11/11/2015',
SUM(CASE book.Date ='15/11/2015' THEN book.Count ELSE 0 END) AS '15/11/2015',
SUM(CASE book.Date ='17/11/2015' THEN book.Count ELSE 0 END) AS '17/11/2015'
FROM
store,
book
WHERE
store.Id = booksold.Bid
AND store.Id IN (1,2)
GROUP BY
book.Name
ORDER BY
book.id ASC;