SELECT (InvoiceTotal - PaymentTotal - CreditTotal) AS BalanceDue
FROM Invoices
WHERE BalanceDue > 0 --error
Run Code Online (Sandbox Code Playgroud)
在WHERE子句中不能使用在所选列列表中设置为变量的计算值"BalanceDue".
它有办法吗?在这个相关的问题中(在Where子句中使用MySQL Select Statment中的变量),似乎答案是,实际上,不,你只需要写出计算(并在查询中执行该计算)两次,没有这是令人满意的.
我有一个查询,它旨在向我显示表A中的任何行,这些行最近还没有更新.(每行应在"month_no"之后的2个月内更新.):
SELECT A.identifier
, A.name
, TO_NUMBER(DECODE( A.month_no
, 1, 200803
, 2, 200804
, 3, 200805
, 4, 200806
, 5, 200807
, 6, 200808
, 7, 200809
, 8, 200810
, 9, 200811
, 10, 200812
, 11, 200701
, 12, 200702
, NULL)) as MONTH_NO
, TO_NUMBER(TO_CHAR(B.last_update_date, 'YYYYMM')) as UPD_DATE
FROM table_a A
, table_b B
WHERE A.identifier = B.identifier
AND MONTH_NO > UPD_DATE
Run Code Online (Sandbox Code Playgroud)
WHERE子句中的最后一行导致"ORA-00904无效标识符"错误.不用说,我不想在WHERE子句中重复整个DECODE函数.有什么想法吗?(接受修复和变通方法......)
当我尝试在SQL Server 2005中执行以下代码时,我收到错误
列名称DistanceFromAddress无效
码:
select
SQRT(POWER(cast(Program_Latitude as float) - cast('41.5126237' as float), 2) +
POWER(cast(Program_Longitude as float) - cast('-81.6516411' as float), 2)) * 62.1371192 AS DistanceFromAddress
from
tblProgram
where
DistanceFromAddress < 2
Run Code Online (Sandbox Code Playgroud)
我正在使用select语句正确获取值,但是当我尝试检查条件时,where DistanceFromAddress < 2我收到错误.
我该如何解决这个问题?
可能重复:
引用WHERE子句中的列别名
SELECT
Trade.TradeId,
Isnull(Securities.SecurityType,'Other') SecurityType,
TableName,
CASE
WHEN
SecurityTrade.SecurityId IS NOT NULL
THEN
SecurityTrade.SecurityId
ELSE
Trade.SecurityId
END AS PricingSecurityID,
sum(Trade.Quantity)OVER(Partition by Securities.SecurityType, SecurityTrade.SecurityId,Trade.Price, Buy,Long ) as sumQuantity,
--added porfolio id for Getsumofqantity
Trade.PortfolioId,
Trade.Price,
case
when (Buy = 1 and Long = 1) then 1
when (Buy = 0 and Long = 0) then 1
else 0
end Position
from
Fireball_Reporting..Trade
where porfolioid =5 and Position =1
Run Code Online (Sandbox Code Playgroud)
我想在我的where子句中使用Position = 1,这是case的别名
case
when (Buy = 1 and Long = 1) …Run Code Online (Sandbox Code Playgroud) 我需要在postgres中按计算列过滤.使用MySQL很容易,但如何使用Postgres SQL实现?
伪代码:
select id, (cos(id) + cos(id)) as op from myTable WHERE op > 1;
Run Code Online (Sandbox Code Playgroud)
任何SQL技巧?
我正在使用 Spring-batch 版本 3.0.6.RELEASE 来查询 MySQL 数据库中的一些数据,然后对其进行处理。
使用详情:
MySqlPagingQueryProvider sort key(请查看下面的查询以获取更多详细信息)询问:
SELECT
target.tx_timestamp AS event_datetime,
....
FROM
some_table AS target
....
WHERE
target.tx_timestamp > :startTime AND target.tx_timestamp <= :endTime;
Run Code Online (Sandbox Code Playgroud)
编码:
Map<String, Order> sortKeys = new HashMap<>();
sortKeys.put("event_datetime", Order.ASCENDING);
MySqlPagingQueryProvider queryProvider = new MySqlPagingQueryProvider();
queryProvider.setSortKeys(sortKeys);
Run Code Online (Sandbox Code Playgroud)
生成的查询(请注意带有event_datetime的部分):
WHERE
(target.tx_timestamp > ? AND target.tx_timestamp <= ?) AND
((event_datetime > ?))
Run Code Online (Sandbox Code Playgroud)
错误:
org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar .... Unknown column 'event_datetime' in 'where clause'.
Run Code Online (Sandbox Code Playgroud)
是否可以使用别名作为排序键?
同样值得注意的是这个线程有同样的问题, …
这是一个简单的问题,我已经挂断了.我想知道我是否可以创建列别名然后在我的WHERE子句中使用它,即:
SELECT TRACTOR, CONVERT(VARCHAR, ORDER) AS NUMBER
FROM TABLE
WHERE NUMBER = '4'
Run Code Online (Sandbox Code Playgroud)
请记住,这只是我想要做的一个例子.我正在运行的查询有点复杂,但只是如何创建变量然后在子句中使用它的基本思路.
我的问题是关于where子句中的别名列.我有一个查询在一个数据库中查找发票号,并将其与另一个数据库中字段的前7位数匹配.当我们只有6位数时,查询工作正常,但现在我们有7位,我收到错误,我试图以不同的方式重写查询.
面临在选择条件的地方使用列别名的需要.找到可行的解决方案在这里.
假设我们有一对一的关系(用户到角色),我们希望获得如下结果:
SELECT u.name AS u_name, r.name AS r_name
FROM users AS u
INNER JOIN roles AS r
ON u.role_id = r.role_id
WHERE u.name = 'John'
Run Code Online (Sandbox Code Playgroud)
我们有相应的idex user.name(仅举例).
如果运行此查询EXPLAIN,则显示选择期间使用的所有索引(包括名称索引).
现在,因为我们想在WHERE子句中使用别名,基于提出的解决方案,我们可以重写查询:
SELECT * FROM (
SELECT u.name AS u_name, r.name AS r_name
FROM users AS u
INNER JOIN roles AS r
ON u.role_id = r.role_id
) AS temp
WHERE u_name = 'John'
Run Code Online (Sandbox Code Playgroud)
如您所见,WHERE嵌套选择中没有子句.运行此查询EXPLAIN会得到相同的结果(只是承认,我不是分析'解释'结果的专家,但仍然):
我对此结果感到有点困惑:确信至少不会使用用户名索引.
Q1: postgres是否以这种方式使用索引?
Q2: …
sql ×6
sql-server ×3
postgresql ×2
alias ×1
decode ×1
indexing ×1
mysql ×1
ora-00904 ×1
oracle ×1
qtsql ×1
select ×1
spring-batch ×1
t-sql ×1