Oracle 在1个表中选择不同的值

Oracle 在1个表中选择不同的值,oracle,coldfusion,Oracle,Coldfusion,这是我的数据库表的示例: id-笔颜色-笔类型-笔价格-购买日期 1-红色-A类-10.00-10/02/2013 1-白色-B型-21.00-13/02/2013 2-蓝色-A类-12.00-09/02/2013 1-黄色-C型-14.00-23/02/2013 我期望的输出是: 如果我想让它按相同的id分组呢 id-价格A-价格A+B-价格B-价格C 1-10.00-31.00-21.00-14.00 2-12.00-0-0-0 我真的很难做到这一点。我认为这可能很简单,但我已经没有想法了。

这是我的数据库表的示例:

id-笔颜色-笔类型-笔价格-购买日期

1-红色-A类-10.00-10/02/2013

1-白色-B型-21.00-13/02/2013

2-蓝色-A类-12.00-09/02/2013

1-黄色-C型-14.00-23/02/2013

我期望的输出是:

如果我想让它按相同的id分组呢

id-价格A-价格A+B-价格B-价格C

1-10.00-31.00-21.00-14.00

2-12.00-0-0-0


我真的很难做到这一点。我认为这可能很简单,但我已经没有想法了。

虽然您的确切需求还不清楚,但cfoutput的group属性可能会让您走上正确的道路。在你的情况下,试试这样的方法

 <cfquery name="yourquery">
 select blah, blah
 order by id
 </cfquery>
按id排序很重要。它导致

<cfoutput query="yourquery" group ="id">
#grouped data#
<cfoutput>
#ungrouped data#
</cfoutput>
#more grouped data if you want#
</cfoutput>

这是总的想法。您应该能够根据您的具体要求对其进行调整。

假设每个日期只有一个id和类型,这应该可以:

<cfquery name='b'>
SELECT ID
    , AVG( DECODE( Pen_Type, 'Type A', Pen_Price, 0 ) ) AS Price_A
    , AVG( DECODE( Pen_Type, 'Type B', Pen_Price, 0 ) ) AS Price_B
    , AVG( DECODE( Pen_Type, 'Type C', Pen_Price, 0 ) ) AS Price_C
FROM Pen_Table
WHERE Date_Purchase = #Date#
GROUP BY ID
</cfquery>
请注意,AVG的聚合函数可以是任何聚合函数,它的唯一目的是让它在每个id中有一行。这同样只适用于假设每个id、每个日期只有一种笔类型的情况。如果您有更多行,那么这将不起作用。鉴于你提供的信息,我相信这会奏效。与在查询中尝试计算A+B相比,您可以轻松地在输出中计算A+B


希望这有帮助。

问题不清楚。我理解你的表格结构,但我不知道你想要达到什么目的。@DanBracuk我刚才也在键入同样的内容。嘿,对不起。我想要的输出将在一个表中。相同的id,不同类型的笔。但我想榨取价格。示例:A型笔的价格和A型笔的价格+B型笔的价格是否清楚?还是我让你更加困惑?ID代表什么?据我所知,它不是一个真正的ID。这是我能想到的唯一的例子。实际上我的桌子有点不同。但我不能出于保密目的公开它。这就是group属性的工作原理。是你玩玩的时候了。谢谢你的巴士!现在我可以看到流程了。我可以继续下一步。谢谢芒奇金:D