我有一个包含类似数据的表。
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
答案 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/')
]
}
}