zoukankan      html  css  js  c++  java
  • sql查询行转列

    昨天下午碰到一个需求,一个大约30万行的表,其中有很多重复行,在这些行中某些字段值是不重复的。

    比如有ID,NAME,CONTRACT_id,SALES,PRODUCT等,除了PRODUCT字段,其余字段均是一样的,需要去重并合并PRODUCT字段。

    下午头脑发昏,直接写了个O(nm)的vba代码,从16:00开始跑,放到另一台空机器上开始跑,下班的时候看了一下跑了不到1/20,感觉时间浪费在IO上了,当然算法也有很大优化空间,比如排序后再合并。

    回来想了想何不直接导入数据库操作,最简单的用access+VBA就行啊。

    Public Function CombStr(TableName As String, FieldName As String, GroupField As String, GroupValue As String) As String
    ' MsgBox "in module"
        Dim ResultStr As String
        Dim rs As Recordset
            Set rs = CurrentDb.OpenRecordset("select " & FieldName & " from " & TableName & " where " & GroupField & "='" & GroupValue & "'")
            If rs.RecordCount > 0 Then
                Do While Not rs.EOF
                    If InStr(ResultStr, rs.Fields(0).Value) = 0 Then ResultStr = ResultStr & "," & rs.Fields(0).Value
                   
                    rs.MoveNext
                Loop
            End If
            If ResultStr <> "" Then ResultStr = Mid(ResultStr, 2)
            CombStr = ResultStr
    End Function
    
    SELECT IDCombStr("contract","PRODUCT","ID",ID) AS PRODUCTSUM
    FROM contract
    GROUP BY ID;
    

     极速搞定之

     

  • 相关阅读:
    BZOJ2734 [HNOI2012]集合选数
    BZOJ2288:[POJ Challenge]生日礼物
    浅谈堆
    BZOJ1150:[CTSC2007]数据备份
    POJ2442:Sequence
    POJ1442:Black Box
    POJ3784:Running Median
    洛谷【P1090】合并果子&&洛谷【P1334】瑞瑞的木板
    BZOJ1345:[Baltic2007]序列问题
    浅谈栈
  • 原文地址:https://www.cnblogs.com/wangjunyan/p/5317860.html
Copyright © 2011-2022 走看看