怎么样合并这两个SQL,在线等。。。

XinJW 2014-05-06 10:13:59

SELECT a.*,b.*
FROM Process a left join custom b on a.CustomNO=b.CustomNO
WHERE (a.Process_OrderDate IS NOT NULL) AND (CONVERT(Varchar(100),
a.Process_OrderDate, 23) = '2014-05-05') OR
(a.Process_Date IS NOT NULL) AND (CONVERT(Varchar(100), a.Process_Date, 23)
= '2014-05-05')



SELECT nCustom.ID, nCustom.CustomNO, nCustom.M_Name, nCustom.F_Name,
nCustom.SeriesType, nCustom.M_Mobile, nCustom.F_Mobile, nCustom.M_Address,
nCustom.F_Address, nCustom.Series, nCustom.Receivable, nCustom.CardNO,
nCustom.InReturnMoney, nCustom.Sales, nCustom.Remark, nCustom.Prink,
nCustom.Photo, nCustom.PhotoPlace, nCustom.ProcessState,
nCustom.PhotoOrderDate, nCustom.PhotoDate,
nCustom.Receivable + ISNULL(nBuy.Price, 0) - ISNULL(nMoney.Money, 0)
AS n_Arrearage, nCustom.Receivable + ISNULL(nBuy.Price, 0) AS n_TotalSpending,
nCustom.Receivable AS n_Receivable, ISNULL(nBuy.Price, 0) AS n_SecondSpending,
nBuy.Price AS n_SecondSpending, nMoney.Money AS n_TotalPaying
FROM (SELECT ID, CustomNO, SUM(Receivable) 'Receivable', M_Name, F_Name,
SeriesType, M_Mobile, F_Mobile, M_Address, F_Address, Series, CardNO,
InReturnMoney, Sales, Remark, Prink, Photo, PhotoOrderDate, PhotoDate,
PhotoPlace, ProcessState
FROM [Custom]
WHERE Custom.PhotoOrderDate IS NOT NULL AND CONVERT(Varchar(100),
Custom.PhotoOrderDate, 23) = '2014-05-05' OR
Custom.PhotoDate IS NOT NULL AND CONVERT(Varchar(100),
Custom.PhotoDate, 23) = '2014-05-05'
GROUP BY ID, CustomNO, M_Name, F_name, SeriesType, M_Mobile, F_Mobile,
M_Address, F_Address, Series, CardNO, InReturnMoney, Sales, Remark,
Prink, Photo, PhotoOrderDate, PhotoDate, PhotoPlace, ProcessState)
nCustom LEFT OUTER JOIN
(SELECT CustomSN, SUM(Price) 'Price'
FROM [CustomDetails]
WHERE CustomDetails.Class = 'Retail'
GROUP BY CustomSN) nBuy ON
nCustom.CustomNO = nBuy.CustomSN LEFT OUTER JOIN
(SELECT CustomNO, SUM(Money) 'Money'
FROM [Money]
GROUP BY CustomNO) nMoney ON
nCustom.CustomNO = nMoney.CustomNO
WHERE (nCustom.ID > 0)
ORDER BY nCustom.ProcessState DESC, nCustom.PhotoDate DESC,
nCustom.PhotoOrderDate DESC, nCustom.ID DESC
...全文
158 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
XinJW 2014-05-07
  • 打赏
  • 举报
回复
求解决求解决
  • 打赏
  • 举报
回复
1、如果你的版本是2005以上的话,把每个查询放到一个cte中,然后两个cte再进行连接查询,得到你想要的结果 2、或者把两个结果放到临时表中,再对这两个临时表进行连接查查,得到你想要的结果
山寨DBA 2014-05-06
  • 打赏
  • 举报
回复
把你需要的结果集和各表的关联项列出来吧。我看你那两个查询Process表的内容没有出现在第二个查询里,你是要吧Process.*的所有结果揉在第二查询里?那第一个查询里面的custom.*怎么处理呢? 或者说你是想把第二查询的结果集揉在第一个查询里? 如果是一个向另一个里面揉,最简单的办法是两个子查询做个left join,但是这样不能保证符合你的逻辑。
XinJW 2014-05-06
  • 打赏
  • 举报
回复
这里面一共4个表,Custom,Process,CustomDetails,Money Custom表是顾客基本信息的表 Process是顾客的流程操作信息表 CustomDetails是顾客消费清单表 Money是顾客的付款信息表 我想得到的结果是 Select * FROM Process WHERE Process_OrderDate IS NOT NULL AND CONVERT(Varchar(100), Process_OrderDate, 23) = '2014-05-05' OR Process_OrderDateIS NOT NULL AND CONVERT(Varchar(100), Process_OrderDate, 23) = '2014-05-05' 这一句得出我最终想要的结果的一部分,我们要在Custom表中查询Process.CustomNO=CustomNO的顾客基本信息,比如M_Name,F_Name.... 最后在这个基础上面计算出顾客的消费信息,其中这个信息从Custom.Receivable中获得基础消费结果,这个是必须的。然后再计算出CustomDetails.CustomNO=Custom.CustomNO的 Price (当然还有个条件是 WHERE CustomDetails.Class = 'Retail')结果之和为总消费金额 再长出交费信息之合Money表中Money.CustomNO=Custom.CustomNO中的Money之和就是总付款金额 还有加一个列或字段得出消费金额-总付款金额得出欠款额。

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧