我有一个查询语句
Select col1,col2,col3
from table;
表格包含以下行:
col1 col2 col3
A | B | C
B | A | C
C | B | C
我需要比较多列数据,以获取包含单一组合 A,B,C 的不同结果。
结果应该是这样的:
col1 col2 col3
A | B | C
查询结果行的顺序可以更改。
我该如何实现这个功能?
我有一个查询语句
Select col1,col2,col3
from table;
col1 col2 col3
A | B | C
B | A | C
C | B | C
我需要比较多列数据,以获取包含单一组合 A,B,C 的不同结果。
结果应该是这样的:
col1 col2 col3
A | B | C
查询结果行的顺序可以更改。
我该如何实现这个功能?
With CTE as
(
Select MIN(col1) as col1 from MyTable
)
Select * from CTE
cross apply
(
Select MIN(col2) as col2 from MyTable
where col2 <> CTE.col1
)as a
cross apply
(
Select MIN(col3) as col3 from MyTable
where col3 not in (CTE.col1,a.col2)
)as b
SELECT *
FROM table
WHERE (col1 = 'A' AND col2 = 'B' AND col3 = 'C')
col3 ='A' AND col1 ='B'AND col2 ='C'
也会被允许。 - Tim Schmelter如果列数和值已知,您也可以使用以下查询。
The CASE statement is the closest to IF in SQL
SELECT
CASE
WHEN (col1 = 'A' and col2 = 'B' and col3='C') or (col1 = 'C' and col2 = 'A' and col3='B') or (col1 = 'B' and col2 = 'C' and col3='A' )
THEN 1
ELSE 0
END as RESULT, *
FROM table
从结果中,您可以通过检查 RESULT==1(integer)
的值来获取所需的输出。
如果您希望将 结果作为布尔值
返回,则可以进行 CAST
操作,如下:
SELECT
CAST(
CASE
WHEN (col1 = 'A' and col2 = 'B' and col3='C') or (col1 = 'C' and col2 = 'A' and col3='B') or (col1 = 'B' and col2 = 'C' and col3='A' )
THEN 1
ELSE 0
END as RESULT_INT)
as RESUTL, *
FROM table