Sql server 2008 按计数排序不正确-SQL(MS Access 2007)
概述: 比较不同账户代理农产品的日常交易,找出代理和公司持有量之间的差异,仅显示新情况;当前交易中的代码,但不是以前交易中的代码 目标: 按最高频率的代码(即苹果)对交易进行排序 当前表格:Sql server 2008 按计数排序不正确-SQL(MS Access 2007),sql-server-2008,ms-access-2007,Sql Server 2008,Ms Access 2007,概述: 比较不同账户代理农产品的日常交易,找出代理和公司持有量之间的差异,仅显示新情况;当前交易中的代码,但不是以前交易中的代码 目标: 按最高频率的代码(即苹果)对交易进行排序 当前表格: -------------------------------------------------------------------------------------------------------------- | DATE | ACCT_CODE | TYPE | TYPE_DES
--------------------------------------------------------------------------------------------------------------
| DATE | ACCT_CODE | TYPE | TYPE_DESCRIPTION | CODE | DIFFERENCE | AGENT_HOLDING | COMPANY_HOLDING |
--------------------------------------------------------------------------------------------------------------
| 02 Aug 2012 | acc107101 | prod | produce | apple | -1500 | 0 | 1500 |
| 02 Aug 2012 | acc107101 | prod | produce | apple | 1500 | 2000 | 500 |
| 02 Aug 2012 | acc107101 | prod | produce | apple | 0 | 0 | 0 |
| 02 Aug 2012 | acc107101 | prod | produce | apple | 0 | 49797 | 49797 |
| 02 Aug 2012 | acc170000 | prod | produce | grapes | 2500 | 2500 | 0 |
| 02 Aug 2012 | acc170000 | prod | produce | grapes | -1500 | 0 | 1500 |
| 02 Aug 2012 | acc008221 | caus | cash | cash | 0 | 0 | 0 |
| 02 Aug 2012 | acc008221 | caus | cash | carrots | 0 | 43273 | 43274 |
| 01 Aug 2012 | acc008221 | caus | cash | cash | 0 | 0 | 0 |
| 01 Aug 2012 | acc008221 | caus | cash | carrots | 0 | 43273 | 43274 |
| 02 Aug 2012 | acc179185 | prod | produce | mango | 125 | 2775 | 2650 |
| 02 Aug 2012 | acc179185 | prod | produce | mango | -57646 | 453639 | 511286 |
| 02 Aug 2012 | acc636903 | prod | produce | mango | 0 | 481081 | 481081 |
| 02 Aug 2012 | acc001049 | prod | produce | mango | 2500 | 2500 | 0 |
| 02 Aug 2012 | acc001189 | prod | produce | apple | -1091 | 0 | 1091 |
--------------------------------------------------------------------------------------------------------------
代码:
问题:
如何修复使用正确的频率顺序(苹果、芒果、葡萄)?我认为问题在于您的分组过于精细 在这种情况下,从
GROUP BY
子句中排除三个金额列(AgentHolding
、CompanyHolding
和Difference
),并在输出中聚合它们(sum
)
以下是这一变化将产生的效果的示例:
注意:我省略了
left join
和PrevTrade
表,因为我不知道它的结构和数据,但希望这能说明我的意图。Awesome..谢谢!这是更清洁和工作。由于查询会动态比较2个表/2个日期,所以我添加了左连接。
SELECT
Count(CurrentTrade.Code) AS CountOfCode,
CurrentTrade.date,
CurrentTrade.Acct_Code,
CurrentTrade.Type,
CurrentTrade.Code,
CurrentTrade.Agent_Holding,
CurrentTrade.Company_Holding,
CurrentTrade.Difference
FROM CurrentTrade
LEFT JOIN PrevTrade
ON CurrentTrade.Company_Holding=PrevTrade.Company_Holding
WHERE (((PrevTrade.Company_Holding) Is Null) AND ((CurrentTrade.Code)<>'cash'))
GROUP BY
CurrentTrade.Code,CurrentTrade.date,
CurrentTrade.Acct_Code,
CurrentTrade.Type,
CurrentTrade.Agent_Holding,
CurrentTrade.Company_Holding,
CurrentTrade.Difference
ORDER BY count(CurrentTrade.Code) ASC;
---------------------------------------------
| COUNTOFCODE | DATE | TYPE | CODE |
---------------------------------------------
| 1 | 02 Aug 2012 | prod | grapes |
| 1 | 02 Aug 2012 | prod | grapes |
| 1 | 02 Aug 2012 | prod | apple |
| 1 | 02 Aug 2012 | prod | apple |
| 1 | 02 Aug 2012 | prod | apple |
| 1 | 02 Aug 2012 | prod | apple |
| 1 | 02 Aug 2012 | prod | apple |
| 1 | 02 Aug 2012 | prod | mango |
| 1 | 02 Aug 2012 | prod | mango |
| 1 | 02 Aug 2012 | prod | mango |
| 1 | 02 Aug 2012 | prod | mango |
---------------------------------------------