sql子查询(急100分)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql子查询(急100分)相关的知识,希望对你有一定的参考价值。

表A权限表 字段 权限(pass,upload,read) 用户ID
权限 用户ID
pass 12
upland 12
read 10

用户表 字段 用户ID ,用户名称
12 张三
10 李四

求查询结果
用户名称 pass upload read
张三 yes yes no
李四 no no yes
或者查询结果
用户名称 pass upload read
张三 pass upload null
李四 null null read
我要的是直接的sql语句

如果是mssql话希望参考以下答案

--生成测试数据
declare @tb table(id int,powers varchar(20))
declare @tbuser table (id int,users varchar(60))
insert into @tb values(12,'pass')
insert into @tb values(12,'upland')
insert into @tb values(10,'read')
insert into @tbuser values(12,'张三')
insert into @tbuser values(10,'李四')
--查询语句
select a.id,b.users,
                 max(case powers when 'pass' then 1 else 0 end) as pass,
 max(case powers when 'upland' then 1 else 0 end) as upland,
max(case powers when 'read' then 1 else 0  end) as reads  
from @tb a,@tbuser b where  a.id=b.id group by a.id,b.users
--效果请参考效果图1

--如果要生成yes/no
select id,users,
case pass when 1 then 'yes' else 'no' end as pass,
case upland when 1 then 'yes' else 'no' end as upland,
case reads when 1 then 'yes' else 'no' end as reads
 from (select a.id,b.users,
                    max(case powers when 'pass' then 1 else 0 end) as pass,
 max(case powers when 'upland' then 1 else 0 end) as upland,
max(case powers when 'read' then 1 else 0  end) as reads  
from @tb a,@tbuser b where  a.id=b.id group by a.id,b.users) as c

--请参考效果图2

效果图1

效果图2   

参考技术A

直接给你结果,请看图,请采纳啊

参考技术B SELECT userid, username, DECODE (SUM (pass), 1, 'YES', 'NO') pass,
DECODE (SUM (upload), 1, 'YES', 'NO') upload,
DECODE (SUM (READ), 1, 'YES', 'NO') READ
FROM (SELECT b.userid, b.username,
DECODE (a.permission, 'pass', 1, 0) pass,
DECODE (a.permission, 'upload', 1, 0) upload,
DECODE (a.permission, 'read', 1, 0) READ
FROM a, b
WHERE a.userid(+) = b.userid)
GROUP BY userid, username;
这种行转列只适用于权限为有限个数并可列举的情况。本回答被提问者采纳
参考技术C 就是呀,你直接弄两个表,一个表是写有yes no的,另一个表还是第二个用户表,如果都有的话,就能直接查询到表中的字段 参考技术D select * from 用户表 left join 权限表 on t1.用户id=t2.用户id;

sql 子查询中部分数据有空值,怎么返回0,NULL+数字=null出来不可以

UPDATE A set BYZD10 =((SELECT distinct(JF)
FROM B where VIPBH=V_VIPSET.DM and fx='增加' and LX='99-期末')
+(SELECT distinct(JF) FROM B where VIPBH=V_VIPSET.DM and fx='增加'
and LX='00-期初'))

遇到类似问题可以参考这个

comm列有很多记录的值为NULL,因为任何东西与NULL相加结果还是NULL,所以结算结果可能会出现NULL。下面使用了把NULL转换成数值0的函数IFNULL:

SELECT *,sal+IFNULL(comm,0) FROM emp;

参考技术A

如果是sqlserver ,用 isnull,如果是oracle,用nvl,mysql则用 ifnull

UPDATE A set BYZD10 =(isnull(SELECT  distinct(JF)  
FROM B where VIPBH=V_VIPSET.DM and fx='增加' and LX='99-期末'),0)
+(isnull(SELECT  distinct(JF) FROM B where VIPBH=V_VIPSET.DM and fx='增加'
 and LX='00-期初'),0))

追问

语法错误
消息 156,级别 15,状态 1,第 1 行
关键字 'SELECT' 附近有语法错误。
消息 102,级别 15,状态 1,第 2 行
')' 附近有语法错误。
消息 102,级别 15,状态 1,第 4 行
',' 附近有语法错误。

追答UPDATE A set BYZD10 =isnull((SELECT  distinct(JF)  
FROM B where VIPBH=V_VIPSET.DM and fx='增加' and LX='99-期末'),0)
+isnull((SELECT  distinct(JF) FROM B where VIPBH=V_VIPSET.DM and fx='增加'
 and LX='00-期初'),0))

以上是关于sql子查询(急100分)的主要内容,如果未能解决你的问题,请参考以下文章

200分求助!SQL递归查询所有子节点

SQL 子查询计算到最大值

当子查询内存在ORDER BY 字句时查询会报错

sql 子查询中部分数据有空值,怎么返回0,NULL+数字=null出来不可以

数据库SQL Server2012笔记——多表查询子查询分页查询用查询结果创建新表和外连接

现在要查询一个字段至少包括两个中文字,高分急求SQL语句,谢谢~~~