如何查询某一列具有不同值的行?

EMA*_*008 0 sql t-sql

对于像这样的 OrderLine 表:

命令 线 第 3 列 第 4 列
1 1 X X
1 2 X
2 1 X
2 2 X
3 1 X
3 2
4 1 X
4 2 X

Col4 可以是 X 或 Y,但不能同时是两者。该表中的命令 1 违反了规则。如何查找同一订单在 Col4 中具有不同值的所有订单?

我最初的想法是多次加入表,然后使用 HAVING 子句。

SELECT DISTINCT A.[Order], A.Line, A.Col3, A.Col4, A.Col4
FROM OrderLines A 
   INNER JOIN OrderLines B ON B.[Order]= A.[Order]
      AND B.Line = A.Line
GROUP BY A.[Order], A.Line, A.Col3, A.Col4, A.Col4, B.[Order], B.Line, B.Col4
HAVING(A.Line <> B.Line AND A.Col4 <> B.Col4)
ORDER BY A.[Order] ASC, A.Line ASC
Run Code Online (Sandbox Code Playgroud)

Bar*_*ree 5

查找同一订单在 Col4 中具有不同值的所有订单

--Create OrderLine table
CREATE TABLE OrderLine 
(
    [Order]     VARCHAR(512),
    Line    VARCHAR(512),
    col3    VARCHAR(512),
    col4    VARCHAR(512)
);

--Populate OrderLine table
INSERT INTO OrderLine ([Order] , Line , col3 , col4) VALUES
    ('1 ', '1 ', 'X ', 'X'),
    ('1 ', '2 ', 'X ', 'Y'),
    ('2 ', '1 ', 'Y ', 'X'),
    ('2 ', '2 ', 'Y ', 'X'),
    ('3 ', '1 ', 'X ', 'Y'),
    ('3 ', '2 ', 'Y ', 'Y'),
    ('4 ', '1 ', 'X ', 'Y'),
    ('4 ', '2 ', 'X ', 'Y')

--Verify that the record were added correctly  
SELECT * FROM OrderLine

--Select all order rows that have differing col4 values  
SELECT * FROM OrderLine
WHERE [order]  in
(
    SELECT [order] 
    FROM OrderLine group by [order]
    HAVING min(col4)<>max(col4)
)
Run Code Online (Sandbox Code Playgroud)

小提琴

命令 线 第 3 列 第 4 列
1 1 X X
1 2 X