![](/img/trans.png)
[英]SQL combine multiple records of one table into multiple columns of another table
[英]Display records from one table which is not in another table by multiple columns
我正在使用SQL Server 2012 Express进行以下查询。
表_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
表_B
CLIENT TYPEOFWORK STATUS
--------------------------------------------------------
CLIENT A WORK C COMPLETED
我想从显示记录Table_A
这是不是在Table_B
通过client
和typeofwork
。
我需要以下输出。
CLIENT TYPEOFWORK ACTIVITY
------------------------------------------------------
CLIENT A WORK A ACTIVITY A
CLIENT A WORK B ACTIVITY B
我尝试过NOT IN
但仅适用于一列
先感谢您
尝试一下 : NOT EXISTS
这是轻松的完整方案:
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)
输出:
client typeofwork activity
----------------------------------
CLIENT A WORK A ACTIVITY A
CLIENT A WORK B ACTIVITY B
我假设您希望客户端列匹配并且工作类型不相同,对吗? 如果是这样,您可以按以下方式保留联接条件:
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;
尝试使用以下查询:
SELECT * FROM Table_A
WHERE
NOT EXISTS (
SELECT * FROM Table_B WHERE CLIENT = Table_A.CLIENT AND TYPEOFWORK = Table_A.TYPEOFWORK
)
希望它能达到您的目的。 在此处查看演示
尝试这个:
Select * from Table_A
where Client NOT IN (Select Client from Table_B)
and TypeOFWork NOT IN (Select TypeOfWork from Table_B)
尝试以下方法:
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
谢谢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.