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
注意别名和<alias>.<column notation>
- 使用没有别名的大量子查询并不安全 - 请参阅SQL IN query produces strange result
【讨论】:
以上是关于SQL连接两个SELECT语句的麻烦的主要内容,如果未能解决你的问题,请参考以下文章
麻烦高手看下下面这个sql语句,为啥groupby了后,还能接个having 呢?