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

我在执行此操作时遇到严重问题。我认为这可能很简单,但我只是没有想法。

4

2 回答 2

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。

希望这可以帮助。

于 2013-03-01T04:09:26.113 回答
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>

这是一般的想法。您应该能够使其适应您的特定要求。

于 2013-03-01T03:42:01.080 回答