2016-02-19 137 views
-1
select a.dda_pk 
from direct_table a  
where a.dda_type = 'B' 
    and a.dda_status = 'D'   
    and a.dda_location = '01'  
group by a.dda_emp_idno  
having dda_pk < max(a.dda_pk) 
    and a.dda_status = 'D' 
    and a.dda_location = '01' 

列“direct_deposit_audit.dda_pk”是HAVING子句 无效。从Sybase SQL查询转换到SQL Server

+2

欢迎来到StackOverflow!你的问题可能会被关闭,因为你不清楚你在问什么。我的猜测是,您想知道您需要更改哪些内容才能使其在Microsoft SQL Server中正常工作。乍一看,它看起来会工作得很好,假设你在SQL Server中有相同的表'direct_table'。同时,请看[这篇有用的文章](http://stackoverflow.com/help/how-to-ask),它可以帮助你写出能够引发有用反应的问题。 –

+0

不,它不工作时,我在SQL Server中尝试相同的查询但同样的查询在sybase中运行良好! –

+1

它不起作用?您是否收到错误或意外结果?请修改您的问题以包含此信息。 –

回答

-1

全组的元素由必须在SELECT子句中,所以你可以试试这个:

select a.dda_pk 
from direct_table a  
where a.dda_type = 'B' 
and a.dda_status = 'D'   
and a.dda_location = '01'  
group by a.dda_pk  
having a.dda_pk < max(a.dda_pk) 
    and a.dda_status = 'D' 
    and a.dda_location = '01' 
+0

仍然我做了更改后,你要求我做同样的错误! –

+0

@MANIKANTAYADAV请检查我的查询,现在编辑 –

+0

仍然我得到相同的错误 –

0

这是基于一个假设,即SQL每个dda_emp_idno 其中dda_pk小于返回行该dda_emp_idno的最大dda_pk。

这应该做同样的事情在SQL Server:

select dda_pk 
from (
    select 
     dda_pk, 
     dense_rank() over (partition by dda_emp_idno order by dda_pk desc) as RN 
    from 
     direct_table a 
    where 
     a.dda_type = 'B' 
     and a.dda_status = 'D' 
     and a.dda_location = '01' 
) X 
where RN > 1 
+0

它做同样的事情,但我无法看到输出 –

+0

中的任何数据,当我运行原始查询它是显示一些数据,直到group by子句,但是当我运行整个查询时,我在输出中没有得到任何数据。 –

+0

我原来的查询是在sybase中返回5个表,并且在sql server中它没有显示任何数据。 –