Imports System.Data.SqlClient Public Class eform_measure Dim cmd As New SqlCommand Dim da As New SqlDataAdapter Dim sql As String Dim colorArray(10) As Color Dim conn As New SqlConnection Private Sub eform_measure_Load(sender As Object, e As EventArgs) Handles MyBase.Load conn.ConnectionString = connstring cmd.Connection = conn sql = "WITH CTE AS (SELECT timestamp, data, PATINDEX('%[^0-9.-]%', data) AS pos FROM HT_sf), CTE2 AS (SELECT timestamp, data, CASE WHEN pos > 0 THEN LEFT(data, pos - 1) ELSE data END AS data1, CASE WHEN pos > 0 THEN SUBSTRING(data, (pos - 1) + PATINDEX('%[0-9.-]%', SUBSTRING(data, pos, LEN(data))), LEN(data)) ELSE NULL END AS data2_orig FROM CTE AS CTE_1) SELECT timestamp, data, data1, CASE WHEN data2_orig IS NOT NULL AND CONVERT(DECIMAL(18, 2), data2_orig) >= 0 THEN N'合计' + CONVERT(VARCHAR(20), CONVERT(DECIMAL(18, 2), data2_orig)) ELSE '' END AS data2 FROM CTE2 AS CTE2_1 ORDER BY timestamp DESC" cmd.CommandText = sql Dim dt As New DataTable da.SelectCommand = cmd da.Fill(dt) DataGridView1.DataSource = dt End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click sql = "WITH CTE AS (SELECT timestamp, data, PATINDEX('%[^0-9.-]%', data) AS pos FROM HT_sf), CTE2 AS (SELECT timestamp, data, CASE WHEN pos > 0 THEN LEFT(data, pos - 1) ELSE data END AS data1, CASE WHEN pos > 0 THEN SUBSTRING(data, (pos - 1) + PATINDEX('%[0-9.-]%', SUBSTRING(data, pos, LEN(data))), LEN(data)) ELSE NULL END AS data2_orig FROM CTE AS CTE_1) SELECT timestamp, data, data1, CASE WHEN data2_orig IS NOT NULL AND CONVERT(DECIMAL(18, 2), data2_orig) >= 0 THEN N'合计' + CONVERT(VARCHAR(20), CONVERT(DECIMAL(18, 2), data2_orig)) ELSE '' END AS data2 FROM CTE2 AS CTE2_1 ORDER BY timestamp DESC" cmd.CommandText = sql Dim dt As New DataTable da.SelectCommand = cmd da.Fill(dt) DataGridView1.DataSource = dt End Sub End Class