【问题标题】:SQL select query merged with a computation statementSQL 选择查询与计算语句合并
【发布时间】:2013-01-29 10:10:22
【问题描述】:

我的供应商发送了一段 SQL 代码,让我很难使用现有的查询。

我有一个网页正在查询数据库表中的多个值,这是我在 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

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

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”。我也有点迷失这些与实际表格的关系。

我们将不胜感激。或者,如果您愿意,请发布链接,我会尽我所能阅读。

谢谢!

【问题讨论】:

  • 这在我看来不像 SQL。它是什么,一些 Microsoft 扩展?
  • 对我来说它看起来像 SQL,但不是 MSSQL。 :D

标签: sql vendor


【解决方案1】:

这应该可行:

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

【讨论】:

  • 所以虽然我也会假设这一点,但似乎这个查询没有。它与它们在 SQL 查询中使用的命名约定有关,我将在下面发布对我有用的查询。
【解决方案2】:

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

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 不是很熟悉,无法理解他们为什么在选择中调用参数的重命名。但是,此查询可以正常工作并提供我需要的数据。

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

无论如何,我很想知道,但这绝对适合我,所以我要结束它。谢谢大家的回答/cmets和帮助。

【讨论】:

    猜你喜欢
    • 2021-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    相关资源
    最近更新 更多