在1个表中选择不同的值

时间:2013-03-01 03:04:46

标签: 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

我真的很难解决这个问题。我认为这可能很简单,但我的想法已经不多了。

2 个答案:

答案 0 :(得分:1)

假设每个日期只有一个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.

希望这有帮助。

答案 1 :(得分: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>

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