这是我的数据库表的示例:
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
我真的很难解决这个问题。我认为这可能很简单,但我的想法已经不多了。
答案 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>
这是一般的想法。您应该能够根据您的具体要求进行调整。