SQL语句

dengyi425 2015-10-29 11:32:35
表TableA是一个电视剧的的列表,存储的是
Aid,Aname
1 第1集
2 第2集
3 第3集
4 第3集
...

表TableB存储的是用户观看列表 存储的是观看记录
Bid,Aid
1 1
2 2
3 3
...

我现在用一条SQL语句查出所有的TableA关联出TableB查出已观看的和观看顺序(当前观看是第2集,只允许看第2集以前和第3集,不能看第3集以后)
结果如下:
ID 名称 是否观看 是否为下一集观看顺序
1 第1集 true true
2 第2集 true true
3 第3集 false true
4 第4集 false false
...全文
103 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
dengyi422 2015-10-29
  • 打赏
  • 举报
回复
SELECT CASE WHEN (SELECT MAX(aid) FROM TableB)>=A.AID THEN 1 ELSE 0 END AS IsStudy, CASE WHEN (SELECT MAX(aid) FROM TableB)+1>=A.AID THEN 1 ELSE 0 END AS IsVod, A.* FROM TableA as A LEFT JOIN TableB AS B ON B.AID=A.AID
Tiger_Zhao 2015-10-29
  • 打赏
  • 举报
回复
WITH
/* 测试数据
tableA(Aid,Aname)AS(
SELECT 1,'第1集' UNION ALL
SELECT 2,'第2集' UNION ALL
SELECT 3,'第3集' UNION ALL
SELECT 4,'第4集'
)
,TableB(Bid,Aid)AS(
SELECT 1,1 UNION ALL
SELECT 2,2
),*/
c AS (
SELECT a.Aid ID,
a.Aname 名称,
CASE WHEN b.Bid IS NULL THEN
'false'
ELSE
'true'
END 是否观看
FROM tableA a
LEFT JOIN tableB b
ON a.Aid = b.Aid
)
,d AS (
SELECT *,
ROW_NUMBER() OVER(PARTITION BY 是否观看
ORDER BY ID) rn
FROM c
)
SELECT ID,
名称,
是否观看,
CASE WHEN 是否观看='true' THEN
'true'
WHEN rn=1 THEN
'true'
ELSE
'false'
END 是否为下一集观看顺序
FROM d
ORDER BY ID

         ID 名称  是否观看 是否为下一集观看顺序
----------- ----- -------- --------------------
1 第1集 true true
2 第2集 true true
3 第3集 false true
4 第4集 false false

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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