查询两表

wsxcy66668888 2009-01-15 10:49:38
两个表分别记录人员信息(表A)和文件签收信息(表B),数据如下:

表A

部门 姓名
——————————
建设部 张三
工程部 李四
项目部 王五
建设部 赵六
项目部 牛七

表B

部门 姓名 签收日期
——————————————
建设部 张三 2008-1-10
工程部 李四 2008-1-20
项目部 王五 2008-1-16


问题:如何写sql得到下面的结果

部门 姓名 是否已签收
——————————————
建设部 张三 已签收
工程部 李四 已签收
项目部 王五 已签收
建设部 赵六 未签收
项目部 牛七 未签收


谢谢
...全文
139 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
wsxcy66668888 2009-01-18
  • 打赏
  • 举报
回复
非常感谢
gggfcu 2009-01-17
  • 打赏
  • 举报
回复
select aa.* ,是否已签收=case
when bb.xm is null and qsrq is null then '未签收'
else '已签收'
end
from bb right join aa on aa.xm=bb.xm

bm xm 是否已签收
---------- -------- ------
建设部 张三 已签收
工程部 李四 已签收
项目部 王五 已签收
建设部 赵六 未签收
项目部 牛七 未签收

(所影响的行数为 5 行)
ChinaITOldMan 2009-01-17
  • 打赏
  • 举报
回复
ISNULL和Case都可以
JeeChang 2009-01-16
  • 打赏
  • 举报
回复

SELECT 部门,姓名,(CASE 签收日期 WHEN NULL THEN '未签收' ELSE '已签收' END) AS 是否已签收
FROM 表A LEFT JOIN 表B
ON 表A.部门 = 表B.部门

看了LS的方法之后 发现ISNULL表CASE 好
bennyyyyy 2009-01-15
  • 打赏
  • 举报
回复

部门 姓名
——————————
建设部 张三
工程部 李四
项目部 王五
建设部 赵六
项目部 牛七

表B

部门 姓名 签收日期
——————————————
建设部 张三 2008-1-10
工程部 李四 2008-1-20
项目部 王五 2008-1-16

create table #A
(
部门 nvarchar(30),
姓名 nvarchar(30)
)
insert into #A
select
'建设部', '张三' union all
select '工程部', '李四' union all
select '项目部', '王五' union all
select '建设部', '赵六' union all
select '项目部', '牛七'
create table #B
(
部门 nvarchar(30),
姓名 nvarchar(30),
签收日期 datetime
)
insert into #B
select
'建设部', '张三', '2008-1-10' union all
select '工程部', '李四', '2008-1-20' union all
select '项目部', '王五', '2008-1-16'
select distinct #A.*,case when exists(select 1 from #B where #A.部门=#B.部门 and #A.姓名=#B.姓名) then '已签收' else '未签收' end from #A,#B
claro 2009-01-15
  • 打赏
  • 举报
回复
/*
两个表分别记录人员信息(表A)和文件签收信息(表B),数据如下:

表A

部门 姓名
——————————
建设部 张三
工程部 李四
项目部 王五
建设部 赵六
项目部 牛七

表B

部门 姓名 签收日期
——————————————
建设部 张三 2008-1-10
工程部 李四 2008-1-20
项目部 王五 2008-1-16


问题:如何写sql得到下面的结果

部门 姓名 是否已签收
——————————————
建设部 张三 已签收
工程部 李四 已签收
项目部 王五 已签收
建设部 赵六 未签收
项目部 牛七 未签收
*/
/**
if object_id('tableA') is not NULL
drop table tableA
Go
create table tableA (部门 varchar(20),姓名 varchar(20))
Go
insert into tableA
select '建设部','张三' UNION ALL
select '工程部','李四' UNION ALL
select '项目部','王五' UNION ALL
select '建设部','赵六' UNION ALL
select '项目部','牛七'

if object_id('tableB') is not NULL
drop table tableB
Go
create table tableB (部门 varchar(20),姓名 varchar(20),签收日期 varchar(20))
Go
insert into tableB
select '建设部','张三','2008-1-10' UNION ALL
select '工程部','李四','2008-1-20' UNION ALL
select '项目部','王五','2008-1-16'
**/
select a.部门,a.姓名,case when len(b.签收日期) >=1 then '已签收' else '未签收' end 是否已签收
from tableA a
left join tableB b on a.部门=b.部门 and a.姓名=b.姓名
/***
部门 姓名 是否已签收
建设部 张三 已签收
工程部 李四 已签收
项目部 王五 已签收
建设部 赵六 未签收
项目部 牛七 未签收
***/
ks_reny 2009-01-15
  • 打赏
  • 举报
回复

select a.*,(case when isnull(a.簽收日期,'無')='無' then '未簽收' else '已簽收' end) as 是否已簽收
from 表A a left join 表B on (a.部門=b.部門 and a.姓名=b.姓名)
「已注销」 2009-01-15
  • 打赏
  • 举报
回复
幫頂
liangCK 2009-01-15
  • 打赏
  • 举报
回复
---------------------------------
-- Author: liangCK 小梁
---------------------------------

--> 生成测试数据: @表A
DECLARE @表A TABLE (部门 VARCHAR(6),姓名 VARCHAR(4))
INSERT INTO @表A
SELECT '建设部','张三' UNION ALL
SELECT '工程部','李四' UNION ALL
SELECT '项目部','王五' UNION ALL
SELECT '建设部','赵六' UNION ALL
SELECT '项目部','牛七'

--> 生成测试数据: @表B
DECLARE @表B TABLE (部门 VARCHAR(6),姓名 VARCHAR(4),签收日期 DATETIME)
INSERT INTO @表B
SELECT '建设部','张三','2008-1-10' UNION ALL
SELECT '工程部','李四','2008-1-20' UNION ALL
SELECT '项目部','王五','2008-1-16'

--SQL查询如下:

SELECT
A.*,
CASE WHEN B.部门 IS NULL AND B.姓名 IS NULL THEN '未签收' ELSE '已签收' END AS 是否已签收
FROM @表A AS A
LEFT JOIN @表B AS B
ON A.部门=B.部门
AND A.姓名=B.姓名

/*
部门 姓名 是否已签收
------ ---- ------
建设部 张三 已签收
工程部 李四 已签收
项目部 王五 已签收
建设部 赵六 未签收
项目部 牛七 未签收

(5 行受影响)


*/
水族杰纶 2009-01-15
  • 打赏
  • 举报
回复
SELECT A.*, ISNULL(B.签收日期,'未签收') FROM TA A LEFT JOIN TB B ON A.部门 =B.部门 
claro 2009-01-15
  • 打赏
  • 举报
回复
帮顶
gonglangdxaiyv 2009-01-15
  • 打赏
  • 举报
回复
selec a.部门,a.姓名,case when b.签收日期 is not null and b.签收日期<>'' then '已签收' else '未签收' end 是否已签收
from 表A a left outer join 表B b on a.部门=b.部门 and a.姓名=b.姓名

27,581

社区成员

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

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