¿Cómo consultar filas que tienen diferentes valores para una columna?

Resuelto EMAW2008 asked hace 10 meses • 1 respuestas

Para una tabla OrderLine como esta:

Orden Línea col3 col4
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

Col4 puede ser X o Y, no ambos. El orden 1 en esta tabla viola la regla. ¿Cómo encuentro todos los pedidos que tienen valores diferentes en Col4 para el mismo pedido?

Mi idea inicial fue unirme a la tabla varias veces y luego usar una cláusula 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
EMAW2008 avatar Feb 16 '24 01:02 EMAW2008
Aceptado

Encuentre todos los pedidos que tienen diferentes valores en Col4 para el mismo pedido

--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)
)

Violín

Orden Línea col3 col4
1 1 X X
1 2 X Y
Bart McEndree avatar Feb 15 '2024 19:02 Bart McEndree