根据子表显示主表内容问题

ajdkjalj 2017-11-27 12:00:19
DECLARE @t TABLE (id INT PRIMARY KEY, Name NVARCHAR(20))
INSERT INTO @t VALUES (1,'王五')
INSERT INTO @t VALUES (2,'王二')
DECLARE @c TABLE (childid INT PRIMARY KEY,id int, age NVARCHAR(20))
INSERT INTO @c VALUES (1,1,'3')
INSERT INTO @c VALUES (2,1,'')
INSERT INTO @c VALUES (3,2,'2')

select * from @t
select * from @c

@t主表,@c子表,这里我要查询主表,根据子表最后一条记录age是否为空,查询时显示有年龄,没有年龄。这里主表id为1,子表最后一条记录为2,1,'',为空,显示没有年龄,主表id为2,子表对应不为空,显示有年龄

我要得到的结果
id name result
1 王五 没有年龄
2 王二 有年龄
...全文
189 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
小野马1209 2017-11-27
  • 打赏
  • 举报
回复
如有年龄是Null值,可在条件判断是改成 when B.age is Null
select A.ID,A.Name,
case when 
B.age=='' then '没有年龄'
else '有年龄'
end as result
from @t A
inner join @c B ON B.id=A.id 
文盲老顾 2017-11-27
  • 打赏
  • 举报
回复
select * from @t a
cross apply (select top 1 (case when datalength(age)>0 then '有年龄:'+age else '无年龄' end) as result from @c where id=a.id order by childid desc) app
二月十六 2017-11-27
  • 打赏
  • 举报
回复
DECLARE @t TABLE (id INT PRIMARY KEY, Name NVARCHAR(20))
INSERT INTO @t VALUES (1,'王五')
INSERT INTO @t VALUES (2,'王二')
DECLARE @c TABLE (childid INT PRIMARY KEY,id int, age NVARCHAR(20))
INSERT INTO @c VALUES (1,1,'3')
INSERT INTO @c VALUES (2,1,'')
INSERT INTO @c VALUES (3,2,'2')

SELECT [@t].id ,
Name ,
CASE WHEN c.age <>0 THEN '有年龄'
ELSE '没有年龄'
END AS result
FROM @t
JOIN ( SELECT * ,
ROW_NUMBER() OVER ( PARTITION BY id ORDER BY childid DESC ) AS num
FROM @c
) c ON c.id = [@t].id
AND c.num = 1

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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