为SQL Server 2008中的每个主题选择最新的主题

维克拉克

我有一个关于编程论坛的项目。

我在数据库中有2个表:

  • SUBJECT (idSUB,titleSUB);
  • TOPIC (idTOP,titleTOP,contentTOP,idSUB,idUser [用户创建主题],时间);

我想要的是:

+ select COUNT(*) from TOPIC as numTOPIC group by idSUB--> as Table A
+select TOP 1 titleTOP order by Time desc->  as newestTOP group by idSUB---> as Table B
+ Then JOIN 3 table A,B,SUBJECT--> C(idSUB,titleSUB,numTOPIC,newestTOP, idUser (who created the newest topic))

我已经找到了通往-->的方法LEFT JOIN A但是我真的不知道正确的语法来联接上面的3个表。SUBJECTC(idSUB,titleSUB,numTOPIC)

SELECT  
    a.idSUB, a.titleSUB,
    COUNT(b.idSUB) numTOPIC 
FROM
    SUBJECT a
LEFT JOIN 
    TOPIC b ON a.idSUB = b.idSUB
GROUP BY 
    a.idSUB, a.titleSUB

我只想在一个查询中执行此操作。救命!

更新:

通过@John Bingham下面的代码,输出表无法显示SUBJECT没有任何内容的TOPIC我希望所有这些TOPIC都可以显示。

SELECT 
    s.idSUB, s.titleSUB, a.numTOPIC, 
    isnull(b.newestTOP, '') as [Newest Topic], 
    isnull(b.idUser, '')
FROM 
    Subject s 
INNER JOIN 
    (SELECT 
         IDSub, Count(*) as NumTopic 
     FROM 
         Topic 
     GROUP BY IDSub) a ON s.IDSub = a.IDSub
LEFT JOIN 
    (SELECT 
         t.IDSub, t.titleTop as newestTop, t.idUser as [idUser] 
     FROM 
         Topic t 
     INNER JOIN 
         (SELECT IDSub, Max([Time]) as tm 
          FROM Topic 
          GROUP BY IDSub) x ON t.IDSub = x.IDSub
     WHERE t.[Time] = x.tm) b ON s.IDSub = b.IDSub

这是正确的查询,但我需要更准确的帮助!

约翰·宾汉

我的意愿是将需求(a),(b)和(c)中的每一个转换为将虚拟表传递到您的查询的子查询,而不是尝试组合基本表以一次命中来交付需求。所以-

SELECT s.idSUB, s.titleSUB, a.numTOPIC, isnull(b.newestTOP, '') as [Newest Topic], 
  isnull(b.idUser, '')
FROM Subject s 
  INNER JOIN (SELECT IDSub, Count(*) as NumTopic FROM Topic GROUP BY IDSub) a 
    ON s.IDSub = a.IDSub
  LEFT JOIN (
    SELECT t.IDSub, t.titleTop as newestTop, t.idUser as [idUser] 
    FROM Topic t 
      INNER JOIN (
        SELECT IDSub, Max([Time]) as tm FROM Topic GROUP BY IDSub
      ) x ON t.IDSub = x.IDSub
    WHERE t.[Time] = x.tm
  ) b ON s.IDSub = b.IDSub

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在SQL Server 2008中为每个组选择最后一个id(其中id> 0)

来自分类Dev

SQL Server为每个ID选择最大日期

来自分类Dev

SQL Server:为结果集中的每个子组选择 Max

来自分类Dev

SQL Server 2008选择

来自分类Dev

为 R 中的每个主题创建索引

来自分类Dev

选择查询以在SQL Server 2008中将日期格式显示为DAY MMM DD YYYY

来自分类Dev

在SQL Server中将单行选择为多行

来自分类Dev

在SQL Server中将单行选择为多行

来自分类Dev

SQL Server全部(选择...)为空

来自分类Dev

在SQL Server 2008中选择

来自分类Dev

分钟在SQL Server 2008查询中为hh:mm格式

来自分类Dev

Sql Server中的合并语句,目标表为Sql Server 2008中的现有表

来自分类Dev

将SQL Server 2008 R2 Management Studio主题更改为暗

来自分类Dev

SQL查询以选择具有不同主题的最新记录

来自分类Dev

从类别中选择最新主题(SQL和PHP)

来自分类Dev

SQL:为每个产品选择最新销售

来自分类Dev

SQL Server 2008选择不同的

来自分类Dev

选择查询以在SQL Server 2008中将日期格式显示为mmm dd yyyy hh:mm am

来自分类Dev

计算SQL Server 2008中每个国家/地区的人数

来自分类Dev

SQL Server 2008计划缓存几乎始终为空

来自分类Dev

为SQL Server 2008-2014的备份状态创建视图

来自分类Dev

SQL Server 2008错误-无法为对象分配空间

来自分类Dev

插入语句检查为NULL SQL Server 2008

来自分类Dev

SQL Server 2008计划缓存几乎始终为空

来自分类Dev

sql server(为每个嵌套的结果插入行)

来自分类Dev

SQL Server - 为每个区域列值添加行

来自分类Dev

日期类型为空的SQL Server 2016 Convert函数与SQL Server 2008 R2不同

来自分类Dev

VSCode为WorkSpace中的每个项目设置不同的主题设置

来自分类Dev

R为数据框中的每个主题创建新行

Related 相关文章

  1. 1

    如何在SQL Server 2008中为每个组选择最后一个id(其中id> 0)

  2. 2

    SQL Server为每个ID选择最大日期

  3. 3

    SQL Server:为结果集中的每个子组选择 Max

  4. 4

    SQL Server 2008选择

  5. 5

    为 R 中的每个主题创建索引

  6. 6

    选择查询以在SQL Server 2008中将日期格式显示为DAY MMM DD YYYY

  7. 7

    在SQL Server中将单行选择为多行

  8. 8

    在SQL Server中将单行选择为多行

  9. 9

    SQL Server全部(选择...)为空

  10. 10

    在SQL Server 2008中选择

  11. 11

    分钟在SQL Server 2008查询中为hh:mm格式

  12. 12

    Sql Server中的合并语句,目标表为Sql Server 2008中的现有表

  13. 13

    将SQL Server 2008 R2 Management Studio主题更改为暗

  14. 14

    SQL查询以选择具有不同主题的最新记录

  15. 15

    从类别中选择最新主题(SQL和PHP)

  16. 16

    SQL:为每个产品选择最新销售

  17. 17

    SQL Server 2008选择不同的

  18. 18

    选择查询以在SQL Server 2008中将日期格式显示为mmm dd yyyy hh:mm am

  19. 19

    计算SQL Server 2008中每个国家/地区的人数

  20. 20

    SQL Server 2008计划缓存几乎始终为空

  21. 21

    为SQL Server 2008-2014的备份状态创建视图

  22. 22

    SQL Server 2008错误-无法为对象分配空间

  23. 23

    插入语句检查为NULL SQL Server 2008

  24. 24

    SQL Server 2008计划缓存几乎始终为空

  25. 25

    sql server(为每个嵌套的结果插入行)

  26. 26

    SQL Server - 为每个区域列值添加行

  27. 27

    日期类型为空的SQL Server 2016 Convert函数与SQL Server 2008 R2不同

  28. 28

    VSCode为WorkSpace中的每个项目设置不同的主题设置

  29. 29

    R为数据框中的每个主题创建新行

热门标签

归档