SQL select查询与计算语句合并

时间:2013-01-25 00:01:01

标签: sql vendor

我的供应商发送了一段SQL代码,我现在很难用现有的查询来运行。

我有一个网页,查询数据库表中的多个值,这是我在查询SQL的ASP页面中的代码:

SELECT [Account],
[AccountName],
[ComputerName],
[EMail],
[Telephone],
[Status],
cast(cast([StartDate] as float) as datetime) as 'Start-Date',
cast(cast([LastBackupDate] as float) as datetime) as 'LastBackup-Date',
[TotalFileSize],
[TotalFileCount] 
FROM ExpandedView WHERE loginid = @0

此查询效果很好,但上面指定的“帐户”字段显然只返回实际帐号的一部分。显然,我的供应商使用计算来创建最终帐号,他们已将其发送给我:

use <databasenamehere>
select left(
convert(nvarchar,E.Account)
,5)+'-'+convert(nvarchar,
( 50 +((E.Account)%10)
-((E.Account/10)%10)
+((E.Account/100)%10)
-((E.Account/1000)%10)
+((E.Account/10000)%10)
-((E.Account/100000)%10)
+((E.Account/1000000)%10)
-((E.Account/10000000)%10)
+((E.Account/100000000)%10))
%10 )
+right(convert(nvarchar,E.Account),4) 
as 'Account', AccountName from ExpandView E
Inner Join Customer C
on E.Account=C.Account

现在我意识到这个查询正在选择帐号的前5个数字,附加连字符然后对最后4个数字执行数学过程,但是我无法弄清楚如何读取它。我可以简单地将这两个陈述与“AND”条款一起附加吗?

我真的想了解“E.Account”所指的内容以及为什么他们在查询中使用“ExpandView E”和“Customer C”。我也有点迷失那些与实际桌子有关的东西。

任何帮助将不胜感激。或者如果您愿意,可以发布链接,我会尽可能地阅读。

谢谢!

2 个答案:

答案 0 :(得分:0)

这应该有效:

SELECT left(
convert(nvarchar,E.Account)
,5)+'-'+convert(nvarchar,
( 50 +((E.Account)%10)
-((E.Account/10)%10)
+((E.Account/100)%10)
-((E.Account/1000)%10)
+((E.Account/10000)%10)
-((E.Account/100000)%10)
+((E.Account/1000000)%10)
-((E.Account/10000000)%10)
+((E.Account/100000000)%10))
%10 )
+right(convert(nvarchar,E.Account),4) 
as 'Account',
[AccountName],
[ComputerName],
[EMail],
[Telephone],
[Status],
cast(cast([StartDate] as float) as datetime) as 'Start-Date',
cast(cast([LastBackupDate] as float) as datetime) as 'LastBackup-Date',
[TotalFileSize],
[TotalFileCount] 
FROM ExpandedView E WHERE loginid = @0

答案 1 :(得分:0)

以下是我发现的查询似乎有效:

select left
(convert(nvarchar,E.Account)
,5)+'-'+ convert(nvarchar,
( 50 +((E.Account)%10)
-((E.Account/10)%10)
+((E.Account/100)%10)
-((E.Account/1000)%10)
+((E.Account/10000)%10)
-((E.Account/100000)%10)
+((E.Account/1000000)%10)
-((E.Account/10000000)%10)
+((E.Account/100000000)%10))%10 )
+right(convert(nvarchar,E.Account),4)
as 'Account',
 E.AccountName,
 E.ComputerName,
 E.regloginid,
 E.EMail,
 E.Telephone,
 E.Community,
 E.Status,
 CAST(cast(e.startdate as float) as datetime) as 'Start-Date', 
 CAST(cast(e.lastbackupdate as float) as datetime) as 'LastBackup-Date',
 E.TotalFileSize,
 E.TotalFileCount
 from ExpandedCustomerView E Where E.Status = 'A' and E.regloginid = @0 

他们正在使用的查询似乎将数据库表重命名为以E.xxxxx为前缀 我不确定这是如何工作的。我不太熟悉MSSQL,以了解他们为什么要调用select中的参数重命名。但是,此查询可以正常运行并提供我需要的数据。

也许有人可以回答为什么他们会在“FROM EXPANDEDVIEW E”部分周围使用参数?这似乎是重命名列的时间点。

无论如何,我有兴趣知道,但这绝对适用于我,所以我打算关闭它。感谢大家的回答/评论和帮助。