【问题标题】:SQL Server find unique combinationsSQL Server 查找唯一组合
【发布时间】:2016-06-13 06:59:56
【问题描述】:

我有一张桌子

rate_id  service_id
1        1
1        2
2        1
2        3
3        1
3        2
4        1
4        2
4        3 

我需要通过 rate_id 查找并在表中插入 sevice_ids 的唯一组合...但是当组合在另一个 rate_id 中重复时,我不希望它被插入

在上面的例子中,有 3 种组合 1,21,31,2,3

如何查询第一个表以获取唯一组合?

谢谢!

【问题讨论】:

  • 所以结果会以逗号分隔值存储?并且没有参考 rate_id?
  • 4 的值呢?为什么它没有出现在您预期的输出中?
  • @TimBiegeleisen 这些组合是每个service_idGROUP_CONCAT rate_id
  • @sagi 我想象的差不多,但他的样本应该会显示这一点。
  • @Ivan 我不需要 rate_id。我想找出独特的组合

标签: sql sql-server unique


【解决方案1】:

尝试做这样的事情:

DECLARE @TempTable TABLE ([rate_id] INT, [service_id] INT)

INSERT INTO @TempTable
VALUES (1,1),(1,2),(2,1),(2,3),(3,1),(3,2),(4,1),(4,2),(4,3)

SELECT DISTINCT
    --[rate_id], --include if required
    (
    SELECT
        CAST(t2.[service_id] AS VARCHAR) + ' '
    FROM
        @TempTable t2
    WHERE
        t1.[rate_id] = t2.[rate_id]
    ORDER BY
        t2.[rate_id]
    FOR XML PATH ('')
    ) AS 'Combinations'
FROM 
    @TempTable t1

我将值放在一个表变量中只是为了方便测试 SELECT 查询。

【讨论】:

  • 优秀的查询,但它仍然多次显示组合。
  • 对不起@PanosPlat 我看错了,我以为你想要每个费率 ID 的不同值。我将修改上述内容以从结果集中删除该字段。
  • @Paul Andrew,你必须在 ORDER BY 子查询中有 ORDER BY 否则它不起作用。要测试将“(1,2)”作为第一个值。否则很好的答案。
  • 谢谢@Alex 我已经修改了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-06
  • 1970-01-01
相关资源
最近更新 更多