我要做一个论坛,其中有两个表,一个表为tb1用来存放提问的问题,另一个表为tb2,用来存放针对tb1中的每个问题所做的答复。两个表的字段如下:tb1:
问题编号
提问人
问题标题
问题内容
提问时间tb2:
问题编号
答复人
答复时间
答复内容
tb1中有数据:
问题编号 提问人 问题标题 问题内容 提问时间
001 pname1 topic1 content1 2008-1-1
002 pname2 topic2 content2 2008-1-2tb2中有数据:(“问题编号”为关联字段)
问题编号 答复人 答复时间 答复内容
001 xname1 2008-1-1 xcontent1
001 xname2 2008-1-2 xcontent2
001 xname3 2008-1-3 xcontent3从上述tb1和tb2数据中我想得到下列结果:问题编号 问题标题 提问人 提问时间 回复数 最后答复时间 最后答复人
001 topic1 pname1 2008-1-1 2 2008-1-3 xname3
002 topic2 pname2 2008-1-2 0 null null
sql语句应该如何写,请指教!
问题编号
提问人
问题标题
问题内容
提问时间tb2:
问题编号
答复人
答复时间
答复内容
tb1中有数据:
问题编号 提问人 问题标题 问题内容 提问时间
001 pname1 topic1 content1 2008-1-1
002 pname2 topic2 content2 2008-1-2tb2中有数据:(“问题编号”为关联字段)
问题编号 答复人 答复时间 答复内容
001 xname1 2008-1-1 xcontent1
001 xname2 2008-1-2 xcontent2
001 xname3 2008-1-3 xcontent3从上述tb1和tb2数据中我想得到下列结果:问题编号 问题标题 提问人 提问时间 回复数 最后答复时间 最后答复人
001 topic1 pname1 2008-1-1 2 2008-1-3 xname3
002 topic2 pname2 2008-1-2 0 null null
sql语句应该如何写,请指教!
-- Author: liangCK 小梁
---------------------------------
--> 生成测试数据: @tb1
DECLARE @tb1 TABLE (问题编号 VARCHAR(3),提问人 VARCHAR(6),问题标题 VARCHAR(6),问题内容 VARCHAR(8),提问时间 DATETIME)
INSERT INTO @tb1
SELECT '001','pname1','topic1','content1','2008-1-1' UNION ALL
SELECT '002','pname2','topic2','content2','2008-1-2'
--> 生成测试数据: @tb2
DECLARE @tb2 TABLE (问题编号 VARCHAR(3),答复人 VARCHAR(6),答复时间 DATETIME,答复内容 VARCHAR(9))
INSERT INTO @tb2
SELECT '001','xname1','2008-1-1','xcontent1' UNION ALL
SELECT '001','xname2','2008-1-2','xcontent2' UNION ALL
SELECT '001','xname3','2008-1-3','xcontent3'--SQL查询如下:SELECT
A.问题编号,
A.问题标题,
A.提问人,
A.提问时间,
B.回复数,
B.最晚答复时间,
C.答复人 AS 最晚答复人
FROM @tb1 AS A
LEFT JOIN (
SELECT
问题编号,
COUNT(*) AS 回复数,
MAX(答复时间) AS 最晚答复时间
FROM @tb2
GROUP BY 问题编号
) AS B
ON A.问题编号=B.问题编号
LEFT JOIN @tb2 AS C
ON B.问题编号=C.问题编号
AND B.最晚答复时间=C.答复时间/*
问题编号 问题标题 提问人 提问时间 回复数 最晚答复时间 最晚答复人
---- ------ ------ ----------------------- ----------- ----------------------- ------
001 topic1 pname1 2008-01-01 00:00:00.000 3 2008-01-03 00:00:00.000 xname3
002 topic2 pname2 2008-01-02 00:00:00.000 NULL NULL NULL(2 行受影响)
*/
from tb1 a left join (
select 问题编号,count(1) as 回复数,max(答复时间) as 最后答复时间
from tb2
group by 问题编号
) as b on a.问题编号=b.问题编号
left join tb2 c on b.问题编号=c.问题编号 and b.最后答复时间 = c.答复时间