You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server中按键字段提取MIX字段唯一组合的技术需求

针对你需要按[key1]、[key2]、[key3]分组,提取每组MIX字段唯一组合的需求,我整理了两种实用方案——优先推荐T-SQL直接在SQL Server里处理,效率更高;如果需要在Excel环境下操作,也给你准备了VBA方案:

T-SQL实现方案

方案1:SQL Server 2017+ 简洁版(推荐)

如果你的SQL Server版本是2017及以上,直接用STRING_AGG函数就能轻松实现,配合子查询先对每组的MIX值去重,避免重复拼接:

SELECT 
    key1,
    key2,
    key3,
    STRING_AGG(DISTINCT mix_value, ' ') AS unique_mix_combinations
FROM (
    -- 先对每组的MIX字段去重,同时清理首尾空格避免无效重复
    SELECT DISTINCT
        key1,
        key2,
        key3,
        TRIM(MIX) AS mix_value
    FROM YourTableName -- 替换成你的实际表名
) AS deduplicated_data
GROUP BY key1, key2, key3;

方案2:兼容低版本SQL Server(2016及以下)

要是你的SQL Server版本不支持STRING_AGG,可以用经典的STUFF+FOR XML PATH组合来完成字符串拼接,同样支持去重:

SELECT 
    t.key1,
    t.key2,
    t.key3,
    STUFF(
        (
            SELECT DISTINCT ' ' + TRIM(m.MIX)
            FROM YourTableName m
            WHERE m.key1 = t.key1 
              AND m.key2 = t.key2 
              AND m.key3 = t.key3
            FOR XML PATH(''), TYPE
        ).value('.', 'NVARCHAR(MAX)'),
        1, 1, ''
    ) AS unique_mix_combinations
FROM YourTableName t
GROUP BY t.key1, t.key2, t.key3;

小贴士:TRIM函数用来清理MIX字段前后的空格,避免像' m1'和'm1'被误判为不同值;如果你的MIX字段本身没有多余空格,可以去掉TRIM。

VBA实现方案(Excel环境)

如果需要把数据导出到Excel后再处理,用VBA结合字典和集合来分组去重拼接,操作也很方便:

Sub GetUniqueMixCombinations()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim dict As Object
    Dim key As String
    Dim mixValue As String
    Dim i As Long
    
    ' 替换成你的数据所在工作表名
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    ' 假设key1在A列,根据实际列位置调整
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    Set dict = CreateObject("Scripting.Dictionary")
    
    ' 遍历数据,按key1|key2|key3作为字典键,存储去重后的MIX值
    For i = 2 To lastRow ' 第1行是表头的话从第2行开始
        key = ws.Cells(i, "A").Value & "|" & ws.Cells(i, "B").Value & "|" & ws.Cells(i, "C").Value
        mixValue = Trim(ws.Cells(i, "D").Value) ' MIX在D列,按需调整
        
        If Not dict.Exists(key) Then
            dict(key) = New Collection
        End If
        
        ' 利用集合的键唯一性自动去重
        On Error Resume Next
        dict(key).Add mixValue, Key:=mixValue
        On Error GoTo 0
    Next i
    
    ' 创建新工作表存储结果
    Dim resultWs As Worksheet
    Set resultWs = ThisWorkbook.Worksheets.Add
    resultWs.Name = "UniqueMixResults"
    ' 写入表头
    resultWs.Cells(1, 1).Resize(1, 4).Value = Array("key1", "key2", "key3", "unique_mix_combinations")
    
    Dim outputRow As Long
    outputRow = 2
    Dim arr As Variant
    Dim item As Variant
    Dim mixStr As String
    
    ' 遍历字典,输出分组后的结果
    For Each key In dict.keys
        arr = Split(key, "|")
        resultWs.Cells(outputRow, 1).Resize(1, 3).Value = arr
        
        mixStr = ""
        For Each item In dict(key)
            mixStr = mixStr & " " & item
        Next item
        resultWs.Cells(outputRow, 4).Value = Trim(mixStr)
        
        outputRow = outputRow + 1
    Next key
    
    MsgBox "处理完成!结果已输出到新工作表。"
End Sub

使用注意:

  • 先确认数据列的位置和代码里的一致,比如key1在A、key2在B、key3在C、MIX在D,不是的话修改对应的列号
  • 运行前如果报错,可在VBA编辑器的「工具」→「引用」里勾选「Microsoft Scripting Runtime」

内容的提问来源于stack exchange,提问作者user29032

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:24:10