问一个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))