相关疑难解决方法(0)

WHERE子句中的引用别名(在SELECT中计算)

SELECT (InvoiceTotal - PaymentTotal - CreditTotal) AS BalanceDue
FROM Invoices
WHERE BalanceDue > 0 --error
Run Code Online (Sandbox Code Playgroud)

在WHERE子句中不能使用在所选列列表中设置为变量的计算值"BalanceDue".

它有办法吗?在这个相关的问题中(在Where子句中使用MySQL Select Statment中的变量),似乎答案是,实际上,不,你只需要写出计算(在查询中执行该计算)两次,没有这是令人满意的.

sql t-sql sql-server

119
推荐指数
2
解决办法
12万
查看次数

在WHERE子句中使用别名

我有一个查询,它旨在向我显示表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 oracle alias decode ora-00904

64
推荐指数
3
解决办法
11万
查看次数

如何在SQL Server的where子句中使用别名列名

当我尝试在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我收到错误.

我该如何解决这个问题?

sql-server-2005

43
推荐指数
2
解决办法
8万
查看次数

我如何在where子句中使用别名?

可能重复:
引用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)

sql sql-server qtsql

17
推荐指数
3
解决办法
6万
查看次数

Postgres如何实现带有子句的计算列

我需要在postgres中按计算列过滤.使用MySQL很容易,但如何使用Postgres SQL实现?

伪代码:

select id, (cos(id) + cos(id)) as op from myTable WHERE op > 1;
Run Code Online (Sandbox Code Playgroud)

任何SQL技巧?

sql postgresql postgresql-9.3

7
推荐指数
2
解决办法
7051
查看次数

以列别名作为排序键的 Spring 批处理 - 格式错误的“where”语句

我正在使用 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)

是否可以使用别名作为排序键?

同样值得注意的是这个线程有同样的问题, …

mysql spring-batch

4
推荐指数
1
解决办法
1787
查看次数

where子句中的列别名给出了无效的列名错误

这是一个简单的问题,我已经挂断了.我想知道我是否可以创建列别名然后在我的WHERE子句中使用它,即:

SELECT TRACTOR, CONVERT(VARCHAR, ORDER) AS NUMBER
FROM TABLE
WHERE NUMBER = '4'
Run Code Online (Sandbox Code Playgroud)

请记住,这只是我想要做的一个例子.我正在运行的查询有点复杂,但只是如何创建变量然后在子句中使用它的基本思路.

我的问题是关于where子句中的别名列.我有一个查询在一个数据库中查找发票号,并将其与另一个数据库中字段的前7位数匹配.当我们只有6位数时,查询工作正常,但现在我们有7位,我收到错误,我试图以不同的方式重写查询.

sql sql-server sql-server-2005

2
推荐指数
1
解决办法
1320
查看次数

索引是用于'外部'和'内部'的嵌套选择中的子句吗?

面临在选择条件的地方使用列别名的需要.找到可行的解决方案在这里.

假设我们有一对一的关系(用户到角色),我们希望获得如下结果:

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 postgresql indexing select

2
推荐指数
1
解决办法
61
查看次数