I am using SQL Server 2012 Express for following query.
Table_A
CLIENT TYPEOFWORK ACTIVITY
-----------------------------------------------------
CLIENT A WORK A ACTIVITY A
CLIENT A WORK B ACTIVITY B
CLIENT A WORK C ACTIVITY C
CLIENT A WORK C NULL
Table_B
CLIENT TYPEOFWORK STATUS
--------------------------------------------------------
CLIENT A WORK C COMPLETED
I want to display records from Table_A
which is not in Table_B
by client
and typeofwork
.
I need following output.
CLIENT TYPEOFWORK ACTIVITY
------------------------------------------------------
CLIENT A WORK A ACTIVITY A
CLIENT A WORK B ACTIVITY B
I tried with NOT IN
but it works only with one column
Thank you in advance
TRY THIS : Use NOT EXISTS
Here is the full scenario for the ease:
CREATE TABLE #table_a(CLIENT VARCHAR(50), TYPEOFWORK VARCHAR(50), ACTIVITY VARCHAR(50))
INSERT INTO #table_a VALUES
('CLIENT A', 'WORK A', 'ACTIVITY A'),
('CLIENT A', 'WORK B', 'ACTIVITY B'),
('CLIENT A', 'WORK C', 'ACTIVITY C'),
('CLIENT A', 'WORK C', NULL)
CREATE TABLE #table_b(CLIENT VARCHAR(50), TYPEOFWORK VARCHAR(50), STATUS VARCHAR(50))
INSERT INTO #table_b values
('CLIENT A', 'WORK C', 'COMPLETED')
SELECT
a.client,
a.typeofwork,
a.activity
FROM #table_a a
WHERE NOT EXISTS(SELECT 1 FROM #table_b b
WHERE a.client = b.client AND a.typeofwork = b.typeofwork)
OUTPUT:
client typeofwork activity
----------------------------------
CLIENT A WORK A ACTIVITY A
CLIENT A WORK B ACTIVITY B
I assume that you want the client columns to match and the typeofwork to not be the same, is that correct? If so, you can left join on your column conditions like this:
SELECT A.CLIENT, A.TYPEOFWORK, A.STATUS
FROM TABLE_A A
LEFT JOIN TABLE_B B ON B.CLIENT = A.CLIENT AND
A.TYPEOFWORK <> B.TYPEOFWORK
WHERE B.CLIENT IS NULL
SELECT A.CLIENT, A.TYPEOFWORK, A.ACTIVITY
FROM TABLE_A A
LEFT JOIN TABLE_B B
ON A.CLIENT = B.CLIENT
AND A.TYPEOFWORK = B.TYPEOFWORK
WHERE B.CLIENT IS NULL
OR B.TYPEOFWORK IS NULL;
Try using below query:
SELECT * FROM Table_A
WHERE
NOT EXISTS (
SELECT * FROM Table_B WHERE CLIENT = Table_A.CLIENT AND TYPEOFWORK = Table_A.TYPEOFWORK
)
Hopefully it serves your purpose. See demo here
Try this:
Select * from Table_A
where Client NOT IN (Select Client from Table_B)
and TypeOFWork NOT IN (Select TypeOfWork from Table_B)
try the following:
SELECT A.*
FROM TABLE_A A
LEFT JOIN TABLE_B B ON B.CLIENT = A.CLIENT AND A.TYPEOFWORK = B.TYPEOFWORK
WHERE B.[STATUS] IS NULL
Thanks.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.