0

私のベンダーは、既存のクエリで機能するのに非常に時間がかかっているSQLコードを送信しました。

データベーステーブルに複数の値をクエリしているWebページがあります。これは、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つの番号に数学的な手順を実行していることに気付きましたが、これを読み取る方法がわかりません。これらの2つのステートメントを「AND」句と一緒に追加するだけでいいですか?

「E.Account」が何を指しているのか、なぜクエリで「ExpandViewE」と「CustomerC」を使用しているのかを本当に理解したいと思います。また、それらが実際のテーブルとどのように関連しているかについても、ちょっと迷っています。

どんな援助もいただければ幸いです。または、必要に応じて、リンクを投稿してください。できる限り読み上げます。

ありがとう!

4

2 に答える 2

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
于 2013-01-25T00:07:35.797 に答える
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」の部分の周りにパラメーターを使用する理由を誰かが答えることができたら?これが、列の名前変更が発生するポイントのようです。

とにかく知りたいのですが、これは間違いなくうまくいくので、これを締めくくります。あなたの答え/コメントと助けをみんなに感謝します。

于 2013-01-29T02:10:22.400 に答える