Sql 如何在插入前在每行上选中“插入”

Sql 如何在插入前在每行上选中“插入”,sql,sql-server-2008,Sql,Sql Server 2008,我想使用SELECT INTO创建一个表,但要避免创建两列相等但顺序与其他两列不同的行。例如,假设我有一个生成以下数据的查询 +----+----+ |col1|col2| +----+----+ |A |XYZ | +----+----+ |2 |4 | +----+----+ |WA |AB | +----+----+ |W |B | +----+----+ |XYZ |A | +----+----+ 在本例中,我希望添加除最后一行之外的所有行,因为它是第一行的

我想使用
SELECT INTO
创建一个表,但要避免创建两列相等但顺序与其他两列不同的行。例如,假设我有一个生成以下数据的查询

+----+----+
|col1|col2|
+----+----+
|A   |XYZ |
+----+----+
|2   |4   |
+----+----+
|WA  |AB  |
+----+----+
|W   |B   |
+----+----+
|XYZ |A   |
+----+----+
在本例中,我希望添加除最后一行之外的所有行,因为它是第一行的翻页副本。以下是我目前掌握的概念版本:

SELECT
    a.col1 AS col1,
    b.col1 AS col2,
INTO newTable
FROM a
INNER JOIN b
    ON -- some match criteria
-- If I were to end the query here, it would generate the table shown above

-- my attempt at avoiding cross duplicates:
WHERE NOT EXISTS ( 
    SELECT x.col1,x.col2
    FROM -- what name do I use here? AS x
    WHERE (x.col1 = col2 AND x.col2 = col1)
)

请注意,在外部
块之前生成代码的标准非常大,我不希望在
不存在的
块中重复它。我该如何处理这个问题?

除了将b.col1、a.col1[其他标准]选择为新表之外,您是否尝试过类似于
选择a.col1、b.col1[其他标准]的方法…
?@Dan我不知道,但这听起来像是正确的方向..@Dan,它将删除两行。如果要保留“A”和“XYZ”并放弃“XYZ”和“A”,则需要确定优先级的方法。如果
col1
,则会发生什么?这会交换col1和col2的值,以便它们始终保持顺序。然后它过滤重复的行。既然你没有说你为什么想要('A','XYZ'),但没有('XYZ','A'),我想你不在乎。
SELECT DISTINCT
  CASE WHEN col2 > col1 THEN col1 ELSE col2 END,
  CASE WHEN col2 > col1 THEN col2 ELSE col1 END
FROM newTable