I have below table and i want to count distinct values that cross between two columns.
ID_DATE DESCRIPT1 DESCRIPT2
20191001 A R
20191001 D B
20191001 B D
20191001 A B
20191002 A B
20191002 C A
20191002 A B
Below is my query but the result is not accurate
SELECT
COUNT(distinct DESCRIPT1 || ' - ' || DESCRIPT2) AS ALL_DESCRIPT,
COUNT(DISTINCT DESCRIPT1) AS DESCRIPT_A,
COUNT(DISTINCT DESCRIPT2) AS DESCRIPT_B,
ID_DATE FROM MY_TABLE GROUP BY ID_DATE;
My result,
ALL_DESCRIPT DESCRIPT_A DESCRIPT_B ID_DATE
4 3 3 20191001
2 2 2 20191002
In my result, the column ALL_DESCRIPT
with ID_DATE 20191002 gives me total of 2 instead of 3. It should be 3 because i have A,B and C which is a total of 3 in both column DESCRIPT1
and DESCRIPT2
Where am i doing it wrong.
Below is insert query for testing in oracle just in case one requires.
INSERT all
INTO SRC_DATA (ID_DATE, DESCRIPT1, DESCRIPT2) VALUES ('20191001','A','R')
INTO SRC_DATA (ID_DATE, DESCRIPT1, DESCRIPT2) VALUES ('20191001','D','B')
INTO SRC_DATA (ID_DATE, DESCRIPT1, DESCRIPT2) VALUES ('20191001','B','D')
INTO SRC_DATA (ID_DATE, DESCRIPT1, DESCRIPT2) VALUES ('20191001','A','B')
INTO SRC_DATA (ID_DATE, DESCRIPT1, DESCRIPT2) VALUES ('20191002','A','B')
INTO SRC_DATA (ID_DATE, DESCRIPT1, DESCRIPT2) VALUES ('20191002','C','A')
INTO SRC_DATA (ID_DATE, DESCRIPT1, DESCRIPT2) VALUES ('20191002','A','B')
SELECT * FROM dual;