Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 有没有办法将列值从外部查询发送到内部子查询?_Sql Server 2008_Select_Subquery - Fatal编程技术网

Sql server 2008 有没有办法将列值从外部查询发送到内部子查询?

Sql server 2008 有没有办法将列值从外部查询发送到内部子查询?,sql-server-2008,select,subquery,Sql Server 2008,Select,Subquery,“讨论”表架构 title description desid replyto upvote downvote views browser used a1 none 1 1 12 - bad topic b2 a1 2 3 14 sql database a3

“讨论”表架构

title      description    desid    replyto    upvote    downvote   views
browser    used           a1        none        1          1       12
-          bad topic      b2        a1          2          3       14
sql        database       a3        none        4          5       34
-          crome          b4        a3          3          4       12
上表有两种内容类型:主要主题和评论。唯一的内容标识符“desid”,用于标识其为主要主题或评论对于主要主题,“设计”以“a”开头,对于评论,“设计”以“b”开头。对于注释,“replyto”是与此注释关联的主要主题的“desid”

我想找出根据向上投票+向下投票+访问次数+添加评论数排列的最主要主题列表。下面的查询按向上投票+向下投票+访问的顺序给出了最热门的主题列表

按查询选择具有最多向上投票+向下投票+视图数的*

select * 
from [DB_user1212].[dbo].[discussions] 
where desid like 'a%'
order by (upvote+downvote+visited) desc
对于我尝试过的评论+向上投票+向下投票+观点

select *
from [DB_user1212].[dbo].[discussions]
where desid like 'a%'
order by (select count(*)
           from [DB_user1212].[dbo].[discussions]
           where replyto = desid )+upvote+downvote+visited) desc 

但它不起作用。因为无法将desid从外部查询发送到内部子查询。请告诉我怎么解决这个问题。请注意,我只需要查询语言的解决方案。

我认为这会起作用:请告诉我

WITH x AS
    (
    select count(*) numberofcomments, replyto
               from [DB_user1212].[dbo].[discussions]
               GROUP BY replyto
    )

    select [DB_user1212].[dbo].[discussions].*
    from [DB_user1212].[dbo].[discussions]
    inner JOIN x 
    ON [DB_user1212].[dbo].[discussions].desid = x.replyto
    where desid like 'a%'
    ORDER BY (numberofcomments+upvote+downvote+visited)

我想这会管用的:请告诉我

WITH x AS
    (
    select count(*) numberofcomments, replyto
               from [DB_user1212].[dbo].[discussions]
               GROUP BY replyto
    )

    select [DB_user1212].[dbo].[discussions].*
    from [DB_user1212].[dbo].[discussions]
    inner JOIN x 
    ON [DB_user1212].[dbo].[discussions].desid = x.replyto
    where desid like 'a%'
    ORDER BY (numberofcomments+upvote+downvote+visited)

您需要使用表别名:

select *
from [DB_user1212].[dbo].[discussions] d1 --alias
where desid like 'a%'
order by (select count(*)
           from [DB_user1212].[dbo].[discussions] d2
           where d2.replyto = d1.desid )+upvote+downvote+visited) desc

现在,在子查询中,您可以在这里通过别名d1引用外部表。我还添加了d2,这在这里是不必要的,但在子查询中显式是有用的。

您需要使用表别名:

select *
from [DB_user1212].[dbo].[discussions] d1 --alias
where desid like 'a%'
order by (select count(*)
           from [DB_user1212].[dbo].[discussions] d2
           where d2.replyto = d1.desid )+upvote+downvote+visited) desc

现在,在子查询中,您可以在这里通过别名d1引用外部表。我还添加了d2,这在这里是不必要的,但在子查询中显式是有用的。

Shiva!你认为有一个人会回答你的问题,这对你来说是可以接受的:湿婆!你认为有没有人会回答你的问题,这对你来说是可以接受的:谢谢拉杜,它很有效,但在某些情况下,它并没有给出完美的结果。但是谢谢你的回答。谢谢你。拉杜,它很有效,但在某些情况下,它并没有给出完美的结果。但是谢谢你回答..+1给你。。