SQL查询:在两列

时间:2017-08-08 08:20:57

标签: sql sql-server duplicates

我有一个包含类似数据的表。

To  From    Rule
01  02  E
01  03  E
01  04  E
02  03  E
02  01  E
03  02  E
04  01  E

因此,01-02与02-01相同。我想写一个查询以拥有唯一对。 结果集应包含 01-02或02-01 ,但不能同时包含两者。

我经历了很多帖子,但却无法弄清楚如何实现这一目标。 如果有人遇到这个问题,请提出解决方案。

预期结果集:

To  From    Rule
01  02  E
01  03  E
01  04  E
02  03  E 

4 个答案:

答案 0 :(得分:2)

简单易行地返回您愿意获得的确切结果。

SELECT * from
(
  select
 (case when _to<_from then _to else null end) as _to,
 (case when _from>_to then _from else null end) as _from,
 _rule
 from _work
) as [Stay_happy_:P]
 where 
 _to is not null and _from is not null 

我创建了数据的测试环境,并通过上述查询选择了它 - &gt; here

答案 1 :(得分:1)

您需要做的是规范化数据。 一种方法是交换From和To,以便较小的值始终在From。

然后使用ROW_NUMBER窗口函数计算组。

查询:

SELECT *
FROM
    ( SELECT *,
        ROW_NUMBER() OVER( PARTITION BY
            -- If From is bigger than To than swap them
            ( CASE WHEN [To] < [From] THEN [To] ELSE [From] END ),
            ( CASE WHEN [To] < [From] THEN [From] ELSE [To] END ) ORDER BY NULL ) AS PairNum
    FROM [some table] ) AS Groups
WHERE PairNum = 1

注意:如果您的SQL Server版本抱怨ORDER BY NULL,请将NULL替换为某些列名,例如ID

答案 2 :(得分:1)

解决问题的另一种方法

select [To],[From] from #temp_t where [To]<[From]
union 
select [From],[To] from #temp_t where [From]<=[To]

答案 3 :(得分:0)

试试这个脚本,

  {
    test: /\.scss$/,
    exclude: [/node_modules/, /styles/],
    use: ['to-string-loader', 'css-loader', {
      loader: 'sass-loader', options: {
        sourceMap: true,
        data: '@import "variables";',
        includePaths: [
          path.join(__dirname, '../styles/sass/')
        ]
      }
    }