如何在每个循环中使用别名列值 [英] How to use alias column value in a for each loop

查看:96
本文介绍了如何在每个循环中使用别名列值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

任何人都可以帮我提一个如何获取别名列值的建议我试图使用数据表在vb.net中使用每个循环。



我的代码实际显示如下

Hi can any one help me to give me a suggestion how to get alias column value from i''m trying to use a for each loop in vb.net using a datatable.

My code is actually shown below

If CInt(RowItem.Item("TOTALLINENO"))  500 Then
       For c As Integer = 0 To tblRawTesterShutdown.Columns.Count - 1
If CInt(tblRawTesterShutdown.Rows(c)(10)("Percentage")); Max Then
       Max = CInt(tblRawTesterShutdown.Rows(c)(10)("Percentage"))
              End If
        Next
  Max = Max - Convert.ToInt32(tblRawTesterShutdown.Rows(tblRawTesterShutdown.Rows.Count - 1))
                  Else
                   Return False
   End If 'End here



我在vs 2005中这样做了。百分比是一个sql server查询。查询如下所示


I have do it in vs 2005. The percentage is a sql server query. the query is shown below

SELECT  t1.LINE_NO, t1.E_FIELD, t1.F_FIELD, t1.G_FIELD, t1.FAMILY, t1.HSA_STATUS,t1.CACHE_FAMILY, 
    SUM(t1.TOTAL) AS CountOfLineNo, t2.TotalOfLineNo, 
    convert(decimal(18,3),(convert(decimal(8,1),SUM(t1.TOTAL)) * 100 / t2.TotalOfLineNo )/100)AS Percentage
    FROM(
          SELECT LINE_NO, E_FIELD,F_FIELD,G_FIELD,HSA_STATUS,FAMILY,CACHE_FAMILY, Count(LINE_NO) as Total
          FROM TX_HSA_SUMM WITH(NOLOCK)
          WHERE MT_TIMESTAMP2 BETWEEN ('2013-04-03 14:28:00.000') AND ('2013-04-03 14:28:00.000')
          AND  E_FIELD!='00000' AND F_FIELD!='00000' AND G_FIELD!='00000' -- added new line
          GROUP BY LINE_NO,E_FIELD,F_FIELD,G_FIELD,HSA_STATUS,FAMILY,CACHE_FAMILY
        ) AS t1 
    LEFT JOIN (
          SELECT LINE_NO, COUNT(LINE_NO) AS TotalOfLineNo
          FROM TX_HSA_SUMM WITH(NOLOCK)
          WHERE MT_TIMESTAMP2 BETWEEN ('2013-04-03 14:28:00.000') AND ('2013-04-03 14:28:00.000')
          GROUP BY LINE_NO 
          ) AS t2 
    ON t1.LINE_NO = t2.LINE_NO    
	GROUP BY t1.LINE_NO, t1.E_FIELD, t1.F_FIELD, t1.G_FIELD, t1.HSA_STATUS, t1.FAMILY, t1.CACHE_FAMILY, t1.Total,t2.TotalOfLineNo
	HAVING t2.TotalOfLineNo > '500' and t1.line_no='64072m' and hsa_status='r'
	ORDER BY   t1.E_FIELD, t1.F_FIELD, t1.G_FIELD, t2.TotalOfLineNo,t1.Total,t1.HSA_STATUS, t1.LINE_NO, t1.FAMILY, t1.CACHE_FAMILY



实际上,每个循环都应该在vb.net中使用sql server的粗体百分比值。我正在使用vs 2005 ans sql server 2000.在此先感谢


The bold Percentage value from sql server should be used in the vb.net for each loop actually. I''m using vs 2005 ans sql server 2000. Thanks in advance

推荐答案

如果我记得很清楚,你想要读取存储在DataTable对象中的值来对记录进行排序并执行其他操作,因为MS SQL Server功能少于MS SQL Server 2005并且不包含ROW_NUMBER等功能...



您想要通过收集记录(存储在单列中)以获得最大值,然后进行一些操作。

您需要将数据表对象转换为列表(T) [ ^ ],其中包含您正在寻找的功能。



If i good remember, you want to read values stored in a DataTable object to sort records and do some other operations, because MS SQL server functionality is less than MS SQL Server 2005 and does not contains functions like ROW_NUMBER...

You want to go through the collection of records (stored in single column) to get a maximum, then to do some operations.
You need to "convert" datatable object into List(of T)[^], which contains functionality you''re looking for.

Module Module1

    Sub Main()
        Dim dt As DataTable = Nothing, dr As DataRow = Nothing, dc As DataColumn = Nothing
        Dim dl As List(Of Integer) = Nothing, i As Integer = 0

        Try
            dt = CreateDataTable()
            dc = dt.Columns("MyInt")
            dl = New List(Of Integer)
            For Each dr In dt.Rows
                dl.Add(dr.Item(dc))
            Next

            Console.WriteLine("=== Unsorted list ===")
            For i = 0 To dl.Count - 1
                Console.WriteLine("Item: {0}, value: {1}", i, dl.Item(i))
            Next

            Console.WriteLine("")
            Console.WriteLine("Sorting...")
            dl.Sort()
            Console.WriteLine("")
            Console.WriteLine("=== Sorted list ===")
            For i = 0 To dl.Count - 1
                Console.WriteLine("Item: {0}, value: {1}", i, dl.Item(i))
            Next

            Console.ReadKey()

        Catch ex As Exception

        End Try


    End Sub

    Function CreateDataTable() As Data.DataTable
        Dim dt As Data.DataTable = Nothing
        Dim dr As Data.DataRow = Nothing
        Dim dc As Data.DataColumn = Nothing
        Dim i As Integer = 0, rnd As Random = Nothing
        Try
            rnd = New Random
            dt = New Data.DataTable("Test")
            dc = New DataColumn("MyInt", GetType(Integer))
            dt.Columns.Add(dc)
            For i = 1 To 20
                dr = dt.NewRow
                dr.Item("MyInt") = rnd.Next(1, 1000)
                dt.Rows.Add(dr)
            Next

        Catch ex As Exception
            Console.WriteLine(ex.Message)
        Finally
            dc = Nothing
            dr = Nothing
            rnd = Nothing
        End Try

        Return dt
    End Function

End Module


这篇关于如何在每个循环中使用别名列值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆