有两张表。如下:
A表: B表:
------------------- ------- - ----------------------------
订单编号 | 品种 | 规格 | 生产号 | | 编号 | 生产号 | A品 | B品 |
------------------- -------- ----------------------------
01 | A | A1 | 001 | | 01 | 001 | 20 | 10 |
---------------------------- ----------------------------
02 | C | A2 | | | 02 | 002 | 20 | 8 |
-------------------- -------- ----------------------------
03 | A | A2 | | | 03 | 005 | 30 | 10 |
-------------------- -------- ----------------------------
04 | A | A1 | 002 | | 04 | 008 | 30 | 10 |
---------------------------- ---------------------------
..... .......
现在要现在这样的一个统计
--------------------------------------------
品种 规格A1 规格2 A品 B品
-----------------------------------------
A 2 2 40 18
--------------------------------------------
C 0 1 0 0
------------------------------------
简单说明: 只有A1下才会有 A品 B品 ,A2下是没的
统计中SQL中不要用distinct
如果没有表达清楚的话,请指出!谢谢
------解决方案--------------------
这统计结果是如何而来?。。
------解决方案--------------------
--------------------------------------------
品种 规格A1 规格2 A品 B品
-----------------------------------------
A 2 2 40 18
这个2是怎么得来的?
(不要高估你的汉语表达能力或者我的汉语理解能力)
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
------解决方案--------------------
select a.品种,max(ma) as A品,max(mb) as B品,MAX(GS1) AS 规格A1 ,MAX(GS2) AS 规格A2 from (
SELECT a.品种,a.规格,sum(A品) as ma ,sum(B品) as mb,sum(iif(规格='A1',1,0)) as GS1 ,sum(iif(规格='A2',1,0)) as GS2 from a left join b on a.生产号=b.生产号
group by a.品种,a.规格) a
group by a.品种
品种 规格A1 规格2 A品 B品
-----------------------------------------
A 2 2 40 18
规格2应为1?
------解决方案--------------------
select a.品种,max(ma) as A品,max(mb) as B品,MAX(GS1) AS 规格A1 ,MAX(GS2) AS 规格A2 from (
SELECT a.品种,a.规格,sum(A品) as ma ,sum(B品) as mb,
sum( CASE WHEN 规格='A1' THEN 1 ELSE 0 END) as GS1 ,
sum(CASE WHEN 规格='A2' THEN 1 ELSE 0 END) as GS2 from a left join b on a.生产号=b.生产号
group by a.品种,a.规格) a
group by a.品种
------解决方案--------------------
先建立一个虚拟表 然后讲两个表的数据Union 连接 然后使用条件性的查询