--#t1 文章表
CREATE TABLE #t1(docID INT,docTitle VARCHAR(100))
INSERT #t1( docID, docTitle )
SELECT 1,'文章1' UNION ALL
SELECT 1,'文章1' UNION ALL
SELECT 2,'文章2' UNION ALL
SELECT 3,'文章3' UNION ALL
SELECT 4,'文章4'
--#t2 用户对文章评论及管理员是否已确认评论人的评论
create TABLE #t2(docID int,userID int,opinion varchar(10),hadRead CHAR(1))
INSERT #t2( docID, userID, opinion,hadRead )
SELECT 1,10,'同意','Y' UNION ALl
SELECT 1,20,'不同意','Y' UNION ALl
SELECT 2,10,'同意','N' UNION ALl
SELECT 2,30,'同意','N' UNION ALl
SELECT 2,20,'同意','N' UNION ALl
SELECT 3,40,'同意','Y' UNION ALl
SELECT 3,50,'不同意','N' /*
现在如何根据两张表形成一个汇总,体现评论人对文章的总体评论和管理员哪些评论已经确认?谢谢
所有人的opinion=同意 则同意,否则为不同意 所有人的hadRead=Y 则为Y,否则为N
docID | opinion | hadRead
1 | 不同意 | Y
2 | 同意 | N
3 | 不同意 | N
4 | |
*/
CREATE TABLE #t1(docID INT,docTitle VARCHAR(100))
INSERT #t1( docID, docTitle )
SELECT 1,'文章1' UNION ALL
SELECT 1,'文章1' UNION ALL
SELECT 2,'文章2' UNION ALL
SELECT 3,'文章3' UNION ALL
SELECT 4,'文章4'
--#t2 用户对文章评论及管理员是否已确认评论人的评论
create TABLE #t2(docID int,userID int,opinion varchar(10),hadRead CHAR(1))
INSERT #t2( docID, userID, opinion,hadRead )
SELECT 1,10,'同意','Y' UNION ALl
SELECT 1,20,'不同意','Y' UNION ALl
SELECT 2,10,'同意','N' UNION ALl
SELECT 2,30,'同意','N' UNION ALl
SELECT 2,20,'同意','N' UNION ALl
SELECT 3,40,'同意','Y' UNION ALl
SELECT 3,50,'不同意','N' /*
现在如何根据两张表形成一个汇总,体现评论人对文章的总体评论和管理员哪些评论已经确认?谢谢
所有人的opinion=同意 则同意,否则为不同意 所有人的hadRead=Y 则为Y,否则为N
docID | opinion | hadRead
1 | 不同意 | Y
2 | 同意 | N
3 | 不同意 | N
4 | |
*/
解决方案 »
- 各位大哥大姐帮帮小弟,关于表连接的问题,谢谢
- 为什么我的查询分析器里面,对象浏览器里面右键选取一个扩展过程,弹出的菜单里“调试”按钮是灰的
- 数据库的除法
- 急求如何快速将A计算机上的100个数据库迁移到B计算机上
- 怎样用二句语句实现?
- Job:SQL 读取 CSV 整套解决方案
- SQl server 利用一个表的数据 来替换另一个表 怎么实现
- 如何效率的列出明细?
- 这句错在哪里update (select top 2 * from HPTraceCode where planid=15 and state='2' order by bodyCode DESC) set state='1'
- IDENTITY 列的数据连续问题?
- SQL 将时间以整天为单位分别计算
- 求一个SQL语句
--#t1 文章表
CREATE TABLE #t1(docID INT,docTitle VARCHAR(100))
INSERT #t1( docID, docTitle )
SELECT 1,'文章1' UNION ALL
SELECT 2,'文章2' UNION ALL
SELECT 3,'文章3' UNION ALL
SELECT 4,'文章4'
--#t2 用户对文章评论及管理员是否已确认评论人的评论
create TABLE #t2(docID int,userID int,opinion varchar(10),hadRead CHAR(1))
INSERT #t2( docID, userID, opinion,hadRead )
SELECT 1,10,'同意','Y' UNION ALl
SELECT 1,20,'不同意','Y' UNION ALl
SELECT 2,10,'同意','N' UNION ALl
SELECT 2,30,'同意','N' UNION ALl
SELECT 2,20,'同意','N' UNION ALl
SELECT 3,40,'同意','Y' UNION ALl
SELECT 3,50,'不同意','N'
goselect a.docid,(case when exists (select 1 from #t2 where docid = a.docid and opinion = '不同意')
then '不同意' else '同意' end)opinion
,(case when exists (select 1 from #t2 where docid = a.docid and hadRead = 'N')
then 'N' else 'Y' end)hadRead
from #t1 adrop table #t1,#t2
docid opinion hadRead
----------- ------- -------
1 不同意 Y
2 同意 N
3 不同意 N
4 同意 Y(4 行受影响)
select #t1.docid,(case when not exists (select 1 from #t2 where docid = #t1.docid and opinion = '不同意')
then '同意' else '不同意' end) opinion
,(case when not exists (select 1 from #t2 where docid = #t1.docid and hadRead = 'N')
then 'Y' else 'N' end) hadRead
from #t1
drop table #t1,#t2
docid opinion hadRead
----- ------- -------
1 不同意 Y
2 同意 N
3 不同意 N
4 同意 Y(4 行受影响)
opinion=(case when (select count(*) from #t2 as t2 where t2.docID=t1.docID and opinion='不同意')>0
then '不同意' else '同意' end),
hadRead=(case when (select count(*) from #t2 as t2 where t2.docID=t1.docID and t2.hadRead='N')>0
then 'N' else 'Y' end)
from #t1 as t1
select docid,min(opinion),min(hadread) from #t2
group by docid