2013-01-25 38 views
0

我的供应商通过一段SQL代码发送了一段SQL代码,我有一段时间可以使用我的现有查询。与计算语句合并的SQL select查询

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

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”。我也失去了那些与实际桌子相关的东西。

任何援助将不胜感激。或者,如果你愿意,发布一个链接,我会尽我所能地阅读。

谢谢!

+0

这看起来不像SQL。这是什么,一些微软的扩展? – wildplasser

+0

它看起来像SQL,而不是MSSQL。 :D – jachguate

回答

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”部分使用参数?这似乎是重新命名列的时候。不管怎么说,我很想知道,但是这对我来说肯定是有用的,所以我要关闭它。感谢大家的回答/评论和帮助。

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 
+0

所以,虽然我会假设这也是,但似乎这个查询没有。它必须处理SQL查询中使用的命名约定,我在下面发布了适用于我的查询。 –