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

请教如何把下面的SQL合并到一句SQL里
请教如何把下面的SQL合并到一句SQL里,多谢了

--查询日期前进货和进货退货量,及其总额
Select sum(case 类型 when '进货单' then 数量 else 0 end) As 进货量,
  sum(case 类型 when '进货单' then 数量*单价 else 0 end) As 进货总额,
  sum(Case 类型 When '进货退货单' Then 数量 Else 0 End) As 进货退货量, 
  sum(case 类型 when '进货退货单' then 数量*单价 else 0 end) As 货退货总额
  From 进货退货 Where 日期 < @StartDate

--查询日期前调入,调出量,及其总额
Select sum(case 类型 when '调入单' then 数量 else 0 end) As 调入量,
  sum(case 类型 when '调入单' then 数量*单价 else 0 end) As 调入总额,
  sum(Case 类型 When '调出单' Then 数量 Else 0 End) As 调出量, 
  sum(case 类型 when '调出单' then 数量*单价 else 0 end) As 调出总额
  From 调拨 Where 日期< @StartDate


--查询日期时间段内进货和进货退货量,及其总额
Select sum(case 类型 when '进货单' then 数量 else 0 end) As 进货量,
  sum(case 类型 when '进货单' then 数量*单价 else 0 end) As 进货总额,
  sum(Case 类型 When '进货退货单' Then 数量 Else 0 End) As 进货退货量, 
  sum(case 类型 when '进货退货单' then 数量*单价 else 0 end) As 货退货总额
  From 进货退货 Where 日期 Between @StartDate And @EndDate

--查询日期时间段内调入,调出量,及其总额
Select sum(case 类型 when '调入单' then 数量 else 0 end) As 调入量,
  sum(case 类型 when '调入单' then 数量*单价 else 0 end) As 调入总额,
  sum(Case 类型 When '调出单' Then 数量 Else 0 End) As 调出量, 
  sum(case 类型 when '调出单' then 数量*单价 else 0 end) As 调出总额
  From 调拨 Where 日期 Between @StartDate And @EndDate

------解决方案--------------------
用union all联结起来就行了。 。

------解决方案--------------------
SQL code
--查询日期前进货和进货退货量,及其总额 
Select sum(case 类型 when  '进货单 ' then 数量 else 0 end) As 进货量, 
       sum(case 类型 when  '进货单 ' then 数量*单价 else 0 end) As 进货总额, 
       sum(Case 类型 When  '进货退货单 ' Then 数量 Else 0 End) As 进货退货量,  
       sum(case 类型 when  '进货退货单 ' then 数量*单价 else 0 end) As 货退货总额,
       item = '查询日期前进货和进货退货量,及其总额'
       From 进货退货 Where 日期  < @StartDate 
union all
--查询日期前调入,调出量,及其总额 
Select sum(case 类型 when  '调入单 ' then 数量 else 0 end) As 调入量, 
       sum(case 类型 when  '调入单 ' then 数量*单价 else 0 end) As 调入总额, 
       sum(Case 类型 When  '调出单 ' Then 数量 Else 0 End) As 调出量,  
       sum(case 类型 when  '调出单 ' then 数量*单价 else 0 end) As 调出总额 ,
       item = '查询日期前调入,调出量,及其总额'
       From 调拨 Where 日期 < @StartDate 
union all
--查询日期时间段内进货和进货退货量,及其总额 
Select sum(case 类型 when  '进货单 ' then 数量 else 0 end) As 进货量, 
       sum(case 类型 when  '进货单 ' then 数量*单价 else 0 end) As 进货总额, 
       sum(Case 类型 When  '进货退货单 ' Then 数量 Else 0 End) As 进货退货量,  
       sum(case 类型 when  '进货退货单 ' then 数量*单价 else 0 end) As 货退货总额,
       item = '查询日期时间段内进货和进货退货量,及其总额'
       From 进货退货 Where 日期 Between @StartDate And @EndDate 
union all
--查询日期时间段内调入,调出量,及其总额 
Select sum(case 类型 when  '调入单 ' then 数量 else 0 end) As 调入量, 
       sum(case 类型 when  '调入单 ' then 数量*单价 else 0 end) As 调入总额, 
       sum(Case 类型 When  '调出单 ' Then 数量 Else 0 End) As 调出量,  
       sum(case 类型 when  '调出单 ' then 数量*单价 else 0 end) As 调出总额 ,
       item = '查询日期时间段内调入,调出量,及其总额 '
       From 调拨 Where 日期 Between @StartDate And @EndDate

------解决方案--------------------
union all 连接
------解决方案--------------------
给个数据啊 看得我头都大了
------解决方案--------------------
使用 UNION 组合两个查询的结果集的两个基本规则是: 

所有查询中的列数和列的顺序必须相同。
数据类型必须兼容。