【问题标题】:trouble in SQL join two SELECT statementSQL连接两个SELECT语句的麻烦
【发布时间】: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 个单独的查询。

标签: sql select join


【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-21
      相关资源
      最近更新 更多