日期:2014-05-17  浏览次数:20407 次

问一个Join的问题
现在有两涨表:Products表:
ProductID    ProductName
1      故事会
2      青年文摘
3      英语月刊
4      新华日报
5      知音

Order表
OrderID  ProductID UserName     BeginDate        EndDate      Status
1     1  张三 2012-01-02  2012-05-02  1
2     1  张三 2012-06-02  2013-12-31  0
3     2  张三 2012-01-01  2012-05-01  1
4     3  李四 2012-01-01  2014-01-01  0

我现在想通过Products表来Left Join 条件是根据单个用户,比如张三 得到如下结果
ProductID  ProductName    Order   UserName    BeignDate   EndDate       Status
   1       故事会           2        张三       2012-6-02    2013-12-31     0
   2       青年文摘         3         张三      2012-1-1      2012-5-1       1     
   3       英语月刊         null     null       null          null           null
   4       新华日报         null     null       null          null           null  
   5       知音            null     null       null          null           null

根据所有产品及用户进行查询,产品要涵盖全,如未订阅,则订阅数据为Null  如有多个订阅,则取最后订阅的产品数据。   

望指教

刚才手贱,还没解决就给点了结贴,重新发一份。

原帖地址:http://bbs.csdn.net/topics/390271298
------最佳解决方案--------------------
status需要筛选吗?
------其他解决方案--------------------
我想知道张三原有那3条数据,变成2条,是因为status?还是日期?
------其他解决方案--------------------


;WITH cte AS(
SELECT a.*,b.ORDER,b.username,b.begindate,b.enddate,b.status FROM products a LEFT JOIN ORDER b ON a.productid=b.productid 
WHERE b.username='张三'
)
SELECT * FROM cte a WHERE NOT EXISTS(SELECT 1 FROM cte b WHERE a.productid=b.productid a.ORDER<b.ORDER  )

不知道行不。
------其他解决方案--------------------

 CREATE TABLE #Products([ProductID] INT,[ProductName] VARCHAR(8))