我正在尝试在SQL中更新名为[Z Score]的列到我的表中。我已经编写了在SELECT查询中创建新列的代码,如下所示:
SELECT cd.*
FROM (
SELECT [Cardholder Name], [Transaction Date], [Merchant],
[Debit Amount],
(
[Debit Amount] -
AVG([Debit Amount]) OVER ()) / (STDEV([Debit Amount]) OVER ()
) as [ZScore]
FROM ['PCard Output']
) cd;
话虽这么说,但我在使用UPDATE查询将数据实际添加到[Z Score]列时迷失了。我正在使用SQL Server17。将不胜感激!
答案 0 :(得分:4)
简单地:
Imports System.IO
Imports System.Text
Public Class HexEngine
Dim ArrayHold() As Byte
Dim Index As Integer = 0
Dim Str As New StringBuilder
Dim tStr As String = ""
Dim tempStr As String = ""
Dim IndexEnd As Integer = 0
Dim InputString As String = ""
Dim a As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
listv.Items.Clear()
For abc = 0 To ListBox1.Items.Count - 1
Scan(ListBox1.Items(a).ToString)
Next abc
End Sub
Private Sub Scan(ByVal dir As String)
Dim myStreamReader As StreamReader = Nothing
myStreamReader = File.OpenText(dir)
InputString = myStreamReader.ReadToEnd()
ArrayHold = Encoding.Default.GetBytes(InputString)
Do
IndexEnd = Index + 9
For x As Integer = Index To IndexEnd
If x > UBound(ArrayHold) Then
tempStr = tempStr
Else
tStr = UCase(Convert.ToString(ArrayHold(x), 16))
If tStr.Length < 2 Then tStr = "0" & tStr
Str.Append(tStr)
tempStr = tempStr & Chr(ArrayHold(x))
End If
Next
Index = Index + 10
Loop While IndexEnd < UBound(ArrayHold)
For Each signature As XElement In xml.Root.Elements
If InStr(1, Str.ToString, signature.<hex>.Value, vbTextCompare) Then
listv.Items.Add(signature.<name>.Value)
If listv.Items.Count > 0 Then
Label1.Text = "Virus"
Else
Label1.Text = "No Virus"
End If
End If
Next
End Sub
Dim xml = <?xml version="1.0"?>
<signatures>
<signature>
<name>Eicar-Test-Signatur (AntiVir)</name>
<hex>58354f2150254041505b345c505a58353428505e2937434329377d2445494341522d5354414e4441</hex>
</signature>
<signature>
<name>Hybris.Gen (AntiVir)</name>
<hex>f649e7cc1e00d37e7f3bc85fff3486ac6de91433aa3a39ef1b114d37b534b8323f6ff67132638a3fe2f2afb4aaf9b7e3b4669bb3cab028298aab533c5d73546cdd396fd58c2c7734c50bca68eb709b889a086fb3db5f8ae533a4d5816e8c5f560983695efa14e291c204b1316e657773</hex>
</signature>
</signatures>
'Dim files As List(Of FileInfo) = FileDirSearcher.GetFiles("C:\Windows\System32", SearchOption.AllDirectories).ToList
' Dim dirs As List(Of DirectoryInfo) = FileDirSearcher.GetDirs("C:\Windows\System32", SearchOption.AllDirectories).ToList
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim startPath As String = Environment.GetFolderPath(Environment.SpecialFolder.Startup)
Dim filess As IEnumerable(Of FileInfo) = FileDirSearcher.GetFiles(dirPath:=startPath,
searchOption:=SearchOption.TopDirectoryOnly,
fileNamePatterns:={"*"},
fileExtPatterns:={"*.vbs", "*.exe"},
ignoreCase:=True,
throwOnError:=True)
For Each File In Get_All_Files(startPath, False)
ListBox1.Items.Add(File)
Next
End Sub
End Class
#Region " Get All Files Function "
' [ Get All Files Function ]
'
' // By Elektro H@cker
'
' Examples:
'
' Dim Files As Array = Get_All_Files("C:\Test", True)
' For Each File In Get_All_Files("C:\Test", False) : MsgBox(File) : Next
Private Function Get_All_Files(ByVal Directory As String, Optional ByVal Recursive As Boolean = False) As Array
If System.IO.Directory.Exists(Directory) Then
If Not Recursive Then : Return System.IO.Directory.GetFiles(Directory, "*", IO.SearchOption.TopDirectoryOnly)
Else : Return IO.Directory.GetFiles(Directory, "*", IO.SearchOption.AllDirectories)
End If
Else
Return Nothing
End If
End Function
#End Region
请注意,我认为您不需要选择其他列,因此您的查询可能如下所示:
UPDATE T
SET YourColumn = cd.[ZScore]
FROM
(
SELECT [Cardholder Name],
[Transaction Date],
[Merchant],
[Debit Amount],
([Debit Amount] - AVG([Debit Amount]) OVER ()) / (STDEV([Debit Amount]) OVER ()) as [ZScore]
FROM ['PCard Output']
) cd INNER JOIN YourTable T ON cd.ID = T.ID;
或
UPDATE T
SET YourColumn = cd.[ZScore]
FROM
(
SELECT ([Debit Amount] - AVG([Debit Amount]) OVER ()) / (STDEV([Debit Amount]) OVER ()) as [ZScore]
FROM ['PCard Output']
) cd INNER JOIN YourTable T ON cd.ID = T.ID;
答案 1 :(得分:1)
您可以通过更新的CTE轻松做到这一点:
(df.changed.eq('Y')).groupby(df['ID']).cumsum().astype(int)
Out[141]:
0 0
1 0
2 0
3 1
4 1
5 1
6 0
7 1
8 1
9 1
10 1
11 0
12 0
13 0
Name: changed, dtype: int32