問一個datediff進行時間排序的sql,不成功

BILLSSJONE 2012-05-24 11:05:41
select (case when A.date1 is null then A.date2 else A.date1 end) as New_Date from table A

order by (case when DateDiff(d,GETDATE(),New_Date)<7 then 0 else 1 end) asc

象上面這樣在select裡面計算得到一個新的時間數據:New_Date,用在order by裡排序,
直接order by New_Date asc排序正常,要加上DateDiff這種計算排序就會出錯:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'New_Date'.

請問為什麼會這樣?如何解決?謝謝!
如果是表裡的字段用datediff是不會出錯的,比如把New_Date換成A.date1就不會出錯。
...全文
162 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

select New_Date,
case when DateDiff(d,GETDATE(),New_Date)<7 then 0 else 1 end as px
into #test--将查询的结果放到临时表#test
from(
select case when A.date1 is null then A.date2 else A.date1 end as New_Date
from table A
)t

select New_Date from #test order by px
BILLSSJONE 2012-05-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
引用 6 楼 的回复:

引用 3 楼 的回复:
函数无法使用别名
直接把New_Date替换为case when A.date1 is null then A.date2 else A.date1 end


謝謝,原來是不能用別名,
但要直接把New_Date替换为case when A.date1 is null then A.date2 else A.date1 end會不……
[/Quote]
如何用临时表?沒用過啊
BILLSSJONE 2012-05-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
引用 6 楼 的回复:

引用 3 楼 的回复:
函数无法使用别名
直接把New_Date替换为case when A.date1 is null then A.date2 else A.date1 end


謝謝,原來是不能用別名,
但要直接把New_Date替换为case when A.date1 is null then A.date2 else A.date1 end會不……
[/Quote]
如何用临时表?沒用過啊
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

引用 3 楼 的回复:
函数无法使用别名
直接把New_Date替换为case when A.date1 is null then A.date2 else A.date1 end


謝謝,原來是不能用別名,
但要直接把New_Date替换为case when A.date1 is null then A.date2 else A.date1 end會不會影響效率?因為order……
[/Quote]

我建议你把数据查询出来放到临时表,在这样排序
AcHerat 元老 2012-05-24
  • 打赏
  • 举报
回复
在你这里应该不是很大。
BILLSSJONE 2012-05-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
函数无法使用别名
直接把New_Date替换为case when A.date1 is null then A.date2 else A.date1 end
[/Quote]

謝謝,原來是不能用別名,
但要直接把New_Date替换为case when A.date1 is null then A.date2 else A.date1 end會不會影響效率?因為order by裡面有多個判斷,會有多次用到New_Date,
--小F-- 2012-05-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
函数无法使用别名
直接把New_Date替换为case when A.date1 is null then A.date2 else A.date1 end
[/Quote]

恩 对的 我没注意看。
Felixzhaowenzhong 2012-05-24
  • 打赏
  • 举报
回复
order by 里 可以直接写 SELECT 中的别名 即New_Date
孤独加百列 2012-05-24
  • 打赏
  • 举报
回复
函数无法使用别名
直接把New_Date替换为case when A.date1 is null then A.date2 else A.date1 end
  • 打赏
  • 举报
回复

select * from(
select (case when A.date1 is null then A.date2 else A.date1 end) as New_Date from table A
)t
order by (case when DateDiff(d,GETDATE(),New_Date)<7 then 0 else 1 end) asc
--小F-- 2012-05-24
  • 打赏
  • 举报
回复
select (case when A.date1 is null then A.date2 else A.date1 end) as New_Date from [table] A  

order by 1 asc
  • 打赏
  • 举报
回复
那就是你连接数据库的问题

Microsoft OLE DB Provider for ODBC Drivers--驱动
error '80040e14'

你可以在查询分析器验证我的语句的正确性,然后再在asp上执行



go
create view view_temp
as
select New_Date,
case when DateDiff(d,GETDATE(),New_Date)<7 then 0 else 1 end as px
from(
select case when A.date1 is null then A.date2 else A.date1 end as New_Date
from table A
)t
--创建以上试图吧

--调用语句
select New_Date from view_temporder by px
BILLSSJONE 2012-05-24
  • 打赏
  • 举报
回复
我是在asp網頁上運行的
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]

引用 11 楼 的回复:
SQL code


select New_Date,
case when DateDiff(d,GETDATE(),New_Date)<7 then 0 else 1 end as px
into #test--将查询的结果放到临时表#test
from(
select case when A.date1 is null then A.date2 e……
[/Quote]

从你的错误上看貌似第一次是成功了,第二次报错说是#test已经存在。你是在查询分析器运行的么?
BILLSSJONE 2012-05-24
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
SQL code


select New_Date,
case when DateDiff(d,GETDATE(),New_Date)<7 then 0 else 1 end as px
into #test--将查询的结果放到临时表#test
from(
select case when A.date1 is null then A.date2 else A.date1 end……
[/Quote]

不行,第一次運行出錯:
Microsoft VBScript runtime error '800a000b'

Division by zero

再次運行:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC SQL Server Driver][SQL Server]There is already an object named '#test' in the database.
BILLSSJONE 2012-05-24
  • 打赏
  • 举报
回复
sql是寫在asp網頁裡的,可以用臨時表不?有權限問題嗎?

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧