这是一个两部分问题。我有一个基本表,如下所示:
DATE ID START_DATE QTY ROW
2011-01-31 1 2009-04-30 40 1
2011-01-31 1 2009-10-31 5 2
2011-01-31 1 2010-01-15 10 3
2011-01-31 2 2009-09-15 50 1
2011-01-31 3 2010-05-25 20 1
2011-01-31 3 2010-06-01 10 2
2011-01-31 3 2010-09-01 200 3
我想将行扩展为列,为每行添加两列(QTY和START_DATE),以便每个日期+ ID只有一行:
DATE ID SD1 QTY1 SD2 QTY2 SD3 QTY3
2011-01-31 1 2009-04-30 40 2009-10-31 5 2010-01-15 10
2011-01-31 2 2009-09-15 50 NULL NULL NULL NULL
2011-01-31 3 2010-05-25 20 2010-06-01 10 2010-09-01 200
现在我需要添加最多44个(MAX(ROW)),但将来可能会有更多。我可以手动添加44:
max(CASE WHEN ROW = 1 THEN q.START_DATE END) AS SD1,
SUM(CASE WHEN ROW = 1 THEN q.QTY END) AS QTY1,
max(CASE WHEN ROW = 2 THEN q.START_DATE END) AS SD2,
SUM(CASE WHEN ROW = 2 THEN q.QTY END) AS QTY2,
...
max(CASE WHEN ROW = n THEN q.START_DATE END) AS SDn,
SUM(CASE WHEN ROW = n THEN q.QTY END) AS QTYn
我的第一个问题,如果我将数字修改为50,那么在我的代码中添加这100个列是否有一个干净的方法,或者我只需要明确显示所有100行?
第二个问题,有没有办法让我用MAX(ROW)告诉语句要添加多少列?意味着如果MAX(ROW)= 10,则添加SD1 - SD10和QTY1 - QTY10。但如果下次运行MAX(ROW)= 100,则添加SD1 - SD100,QTY1 - QTY100
谢谢!