Reputation: 3
I have two tables TAB1 and TAB2
TAB1 :
ID NAME 1 Supreeth 2 Aishu 3 Arvi 4 Gani
TAB2 :
ID DESIGN 1 A 1 B 4 B 4 C 2 A 3 B 3 B
I'm trying to get the count of DESIGN, I'm getting the following output
NAME DESIGN Count(DESIGN) Supreeth A 1 Supreeth B 1 Aishu A 1 Arvi B 2 Gani B 1 Gani C 1
The query I'm trying is
SELECT TAB1.NAME,TAB2.DESIGN, COUNT(DESIGN)
FROM TAB1 , TAB2
WHERE TAB1.ID=TAB2.ID
GROUP BY TAB1.NAME,TAB2.DESIGN,TAB1.ID
ORDER BY TAB1.ID
But I'm looking for the output like
NAME DESIGN Count(DESIGN) Supreeth A 1 Supreeth B 1 Supreeth C 0 Aishu A 1 Aishu B 0 Aishu C 0 Arvi A 0 Arvi B 2 Arvi C 0 Gani A 0 Gani B 1 Gani C 1
Please tell me how to achieve this using SQL query. Thanks in advance
Upvotes: 0
Views: 90
Reputation: 4826
Try this
SELECT T1.[ID], T1.[NAME],T2.[DESIGN],
(
SELECT COUNT([DESIGN]) FROM TAB2 TT2 WHERE TT2.ID=T1.ID AND TT2.[DESIGN] = T2.[DESIGN]
) AS CNT
FROM TAB1 T1
CROSS JOIN
(
SELECT [DESIGN] FROM TAB2 GROUP BY [DESIGN]
) T2
ORDER BY T1.[NAME],T2.[DESIGN]
Upvotes: 0
Reputation: 4173
Try this:
SELECT
TAB1.ID,
TAB1.NAME,TAB2.DESIGN,
SUM(CASE WHEN TAB1.ID=TAB2.ID THEN 1 ELSE 0 END) as count
FROM
TAB1 CROSS JOIN TAB2
GROUP BY
TAB1.ID,TAB1.NAME,TAB2.DESIGN
ORDER BY
TAB1.ID
Upvotes: 3