SQL连接两个SELECT语句的麻烦

Posted

技术标签:

【中文标题】SQL连接两个SELECT语句的麻烦【英文标题】:trouble in SQL join two SELECT statement 【发布时间】:2013-09-26 17:28:55 【问题描述】:

我正在计算表中所需记录的分位数。 表中只有两列,X1

我使用第一个 select 语句来计算少于所需日期的记录数;第二条 select 语句统计总记录数

每个 SELECT 语句运行良好,但我无法将它们连接在一起,有什么提示吗?

(

SELECT count(X2) AS 排名

来自 EMCDX5y_test

WHERE CONVERT(decimal(8,3), X2)

来自 EMCDX5y_test

WHERE X1 =(SELECT max(X1) from EMCDX5y_test))

)

作为r

内连接

(

SELECT count(X2) AS 总数

来自 EMCDX5y_test

) 作为 t

#

这是错误信息

服务器:消息 156,级别 15,状态 1,第 8 行

关键字“as”附近的语法不正确。

服务器:消息 156,级别 15,状态 1,第 13 行

关键字“as”附近的语法不正确。

【问题讨论】:

你没有加入条件,例如INNER JOIN foo ON bar...数据库应该如何知道如何关联这两个“表”? 我尝试了“on 1 = 1”,因为每条语句的结果只有一个数字,实际上没有特定条件。但它没有用。 您可能需要一个 UNION 查询。联接应该是在相关数据之间,但您只是试图找出两个完全不同的值。您有什么理由必须这样做作为查询?无论您如何构建事物,数据库仍然会运行至少 2 个单独的查询。 【参考方案1】:

通常这样写:

SELECT *
FROM X
JOIN Y
ON X.key = Y.key

我没有看到键或 ON 子句。

我想知道您是否真的需要 GROUP BY。听起来您想将值放入存储桶中。我认为你甚至不接近你所拥有的。

也许这是你想要的更多:

http://technet.microsoft.com/en-us/library/ms175126.aspx

【讨论】:

【参考方案2】:

如果我没有遗漏任何内容,您的查询可能会更简单:

select
    sum(case when <condition here> then 1 else 0 end) as cnt1
    count(*) as cnt2
from EMCDX5y_test

如果您真的想保持查询不变,可以使用

select
    (first query) as <something>,
    (second query) as <something>

或者,用你的话来说:

select
   (
       select count(t.X2)
       from EMCDX5y_test as t
       where
          convert(decimal(8,3), t.X2) < 
          (
               select tt.X2
               from EMCDX5y_test as tt
               where tt.X1 = (select max(ttt.X1) from EMCDX5y_test as ttt)
          )
   ) as rank,
   (
       select count(t.X2)
       from EMCDX5y_test as t
   ) as total

注意别名和&lt;alias&gt;.&lt;column notation&gt; - 使用没有别名的大量子查询并不安全 - 请参阅SQL IN query produces strange result

【讨论】:

以上是关于SQL连接两个SELECT语句的麻烦的主要内容,如果未能解决你的问题,请参考以下文章

SQL命令语句小技巧

麻烦高手看下下面这个sql语句,为啥groupby了后,还能接个having 呢?

sql语句中的full join具体是怎么回事啊?

LEFT JOIN连接SQL语句在Access里面报语法错误(操作符丢失),哪位帮帮忙?

SQL update select结合语句详解及应用

Excel表中连接sql并使用sql语句引用excel单元格数据作为查询条件