January 15, 2019 at 3:41 am
Is there an elegant solution to count(*) zero if there are no rows in the 'second' table.
SELECT COUNT(*) AS TEL, ID, A_TEXT, A_ID FROM A FULL OUTER JOIN B ON ID = A_ID GROUP BY ID, A_TEXT, A_ID
ORSELECT COUNT(*) OVER (PARTITION BY A_ID) AS TEL, * FROM A FULL OUTER JOIN B ON ID = A_ID
Instead of a tel (= count) of 1 when there is not row in B, I would like to get the number zero.
Ben
CREATE TABLE A (ID INT, A_TEXT VARCHAR(30))
INSERT INTO A VALUES(0, 'NONE')
INSERT INTO A VALUES (1, 'ONE')
INSERT INTO A VALUES (2, 'TWO')
INSERT INTO A VALUES (3, 'THREE')
CREATE TABLE B (A_ID INT, B_TEXT VARCHAR(30), B_ID_TEXT VARCHAR(300))
INSERT INTO B VALUES (1, 'EEN','a')
INSERT INTO B VALUES (2, 'TWEE','b')
INSERT INTO B VALUES (2, 'ZWEI','c')
INSERT INTO B VALUES (3, 'DRIE','d')
INSERT INTO B VALUES (3, 'TROIS','e')
INSERT INTO B VALUES (3, '3','f')
SELECT * FROM A
SELECT * FROM B
SELECT * FROM A FULL OUTER JOIN B ON ID = A_ID
SELECT COUNT(*) AS TEL, ID, A_TEXT, A_ID FROM A FULL OUTER JOIN B ON ID = A_ID GROUP BY ID, A_TEXT, A_ID
SELECT COUNT(*) OVER (PARTITION BY A_ID) AS TEL, * FROM A FULL OUTER JOIN B ON ID = A_ID
GO
DROP TABLE A
GO
DROP TABLE B
GO
January 15, 2019 at 4:28 am
Does this give you what you want?:SELECT COUNT(B.A_ID) AS TEL, ID, A_TEXT, A_ID FROM A FULL OUTER JOIN B ON ID = A_ID GROUP BY ID, A_TEXT, A_ID
SELECT COUNT(B.A_ID) OVER (PARTITION BY A_ID) AS TEL, * FROM A FULL OUTER JOIN B ON ID = A_ID
It works because NULL values aren't included in COUNT.
January 15, 2019 at 5:12 am
Thank you,
Simple, elegant and I have learned something.
Thanks,
Ben
Viewing 3 posts - 1 through 3 (of 3 total)
You must be logged in to reply to this topic. Login to reply
This website stores cookies on your computer.
These cookies are used to improve your website experience and provide more personalized services to you, both on this website and through other media.
To find out more about the cookies we use, see our Privacy Policy