我有这个查询有效......
select
t.date,
sum(gk.d) as d,
sum(gk.p) as p,
(sum(d)-sum(p)) as s
但我想知道有没有办法选择价值''作为d-p,就像这样:
select
t.date,
sum(gk.d) as d,
sum(gk.p) as p,
(d-p) as s // not working
答案 0 :(得分:4)
SQL通常不支持在同一个SELECT子句中引用列别名,这就是为什么第一个版本适合您,但第二个版本不适用。另一种方法是使用派生表/内联视图:
SELECT x.date,
x.d,
x.p,
x.d - x.p AS s
FROM (SELECT t.date,
SUM(gk.d) AS d,
SUM(gk.p) AS p,
FROM t
JOIN gk ON ...) AS x
请注意,SQL Server要求您为派生表/内联视图定义表别名 - 因此“AS x”
答案 1 :(得分:3)
查看SELECT doc,“SELECT语句的逻辑处理顺序”部分;他们有一个解释为什么以及在哪里可以通过别名引用列。 常见的解决方法是使用派生表或CTE 所以它应该适合你:
SELECT d, p , d-p AS s
FROM
(
select
t.date,
sum(gk.d) as d,
sum(gk.p) as p
FROM ....
)a
答案 2 :(得分:2)
您还可以在SQL 2008中使用公用表表达式:
WITH sumCTE AS
(
SELECT t.date
, SUM(gk.d) as d
, SUM(gk.p) as p
FROM ...
)
SELECT d, p, d - p AS s
FROM sumCTE