日期:2014-05-18  浏览次数:20395 次

无法得到汇总期望的结果
SELECT  
      货类代码.名称,
      ISNULL   ((SELECT       SUM(吞吐量)   WHERE     (出口   =   'true ')),   0)   AS   出口,
      ISNULL   ((SELECT       SUM(吞吐量)   WHERE     (出口   =   'false ')),   0)   AS   进口,
      SUM(三量记录.吞吐量)   AS   合计  
FROM     三量记录  
RIGHT   JOIN   货类代码   ON   货类代码.货类代码   =   三量记录.货类代码  
WHERE   三量记录.日期   between   @StartDate   and   @EndDate  
GROUP   BY   货类代码.名称
-------------------------------------
为什么以上代码只有合计输出的是期望值,出口和进口都没有按照货类代码.名称分类汇总?另外RIGHT   JOIN好像也没有起到效果。
以上代码该如何修改?

------解决方案--------------------
SELECT
货类代码.名称,
sum(case 出品 when 'true ' then 吞吐量 else 0 end) as 出口,
sum(case 出品 when 'false ' then 吞吐量 else 0 end) as 进口,
SUM(三量记录.吞吐量) AS 合计
FROM 三量记录
inner JOIN 货类代码 ON 货类代码.货类代码 = 三量记录.货类代码
WHERE 三量记录.日期 between @StartDate and @EndDate
GROUP BY 货类代码.名称
------解决方案--------------------
楼主用case就行了,
楼主用的子查询语句
SELECT SUM(吞吐量) WHERE (出口 = 'true '))--需要加时间段
------解决方案--------------------
你要的效果應該是對B表加上條件查詢後再和A表關聯,所以要用And。

而如果用Where,是A B表關聯之後,再判斷,就會將一些數據過濾掉,就沒得到你要的結果了。