Oracle агрегированный запрос - PullRequest
0 голосов
/ 12 июля 2011

ColA ColB ColC ColDdata1 rata1 T Test1data1 rata3 F Test2data1 rata2 T Test1data2 rata1 T Test1data2 rata3 T Test1data3 rata4 T Test1

Есть четыре столбца типа Varchar.Что я хочу определить:1. Для каждого уникального значения ColB (rata1, rata2 и т. Д.) Найдите соответствующее значение ColA и двух других столбцов (ColC, ColD), где это конкретное значение ColA имеет значение ColC, равное 'T' 0 или 1 раз.

rata2 data1 T Test1
rata3 data2 T Test1 
rata4 data3 T Test1

2. В приведенном выше запросе, когда ColC был равен 'T' 0 или 1 раз, найдите другие строки, для которых ColA имеет ColC, равный 'F' для этого конкретного значения ColB.

rata3 data1 F Test2  

1 Ответ

1 голос
/ 12 июля 2011

Не понял вашего вопроса вообще. Я исправлю ответ, если вы скажете что-нибудь еще. но насколько я понял ты хочешь что-то подобное?

Редактировать: Я сделал ту же таблицу, что вы дали нам в БД. И это работало нормально. Попробуйте и скажите мне, если это работает

SELECT COLUMNB,MAX(COLUMNA), MAX(ColumnC), MAX(COLUMND)
FROM DUMMY
WHERE ColumnC = 'T'
GROUP BY COLUMNB
HAVING SUM(CASE WHEN COLumnC = 'T' THEN 1 ELSE 0 END) <= 1

UNION ALL
SELECT * 
FROM  DUMMY
WHERE COLumnC = 'F'

Редактировать 2: Как насчет этого?

WITH B
AS(
SELECT A.COLUMNB, MAX(A.COLUMNA) AS COLUMNA, MAX(A.ColumnC) AS COLUMNC, MAX(A.COLUMND) AS COLUMND
FROM DUMMY A
GROUP BY A.COLUMNB
HAVING SUM(CASE WHEN A.COLumnC = 'T' THEN 1 ELSE 0 END) <= 1)


SELECT * 
FROM B 

UNION ALL
SELECT D.COLUMNB, D.ColumnA, D.ColumnC, D.ColumnD
FROM B, DUMMY D
WHERE  B.ColumnB = D.COLUMNB
AND D.ColumnC = 'F'
...