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 行
',' 附近有语法错误。
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分)的主要内容,如果未能解决你的问题,请参考以下文章
sql 子查询中部分数据有空值,怎么返回0,NULL+数字=null出来不可以