Sql server TSQL-对于每个like语句
我想为每一个类似SQL的语句编写一个SQL语句,但我无法理解它 如果我的表A如下所示:Sql server TSQL-对于每个like语句,sql-server,tsql,Sql Server,Tsql,我想为每一个类似SQL的语句编写一个SQL语句,但我无法理解它 如果我的表A如下所示: [dbo].[TABLE_A]( [EmpID] [INT], [FName] [varchar](50) NULL, [LName] [varchar](50) NULL ) [dbo].[TABLE_B]( [EmployeeActivity] [varchar](50) NULL, [EmpID] [INT] ) FOR EACH DISTINCT [Empl
[dbo].[TABLE_A](
[EmpID] [INT],
[FName] [varchar](50) NULL,
[LName] [varchar](50) NULL
)
[dbo].[TABLE_B](
[EmployeeActivity] [varchar](50) NULL,
[EmpID] [INT]
)
FOR EACH DISTINCT [EmployeeActivity] RETURN
[TABLE_B].[EmployeeActivity],
[TABLE_A].[FName],
[TABLE_A].[LName],
[TABLE_A].[EmpID],
CASE
WHEN ([TABLE_B].[EmployeeActivity] IS NULL) THEN ('NO')
ELSE 'YES'
END
…我的表B如下所示:
[dbo].[TABLE_A](
[EmpID] [INT],
[FName] [varchar](50) NULL,
[LName] [varchar](50) NULL
)
[dbo].[TABLE_B](
[EmployeeActivity] [varchar](50) NULL,
[EmpID] [INT]
)
FOR EACH DISTINCT [EmployeeActivity] RETURN
[TABLE_B].[EmployeeActivity],
[TABLE_A].[FName],
[TABLE_A].[LName],
[TABLE_A].[EmpID],
CASE
WHEN ([TABLE_B].[EmployeeActivity] IS NULL) THEN ('NO')
ELSE 'YES'
END
有人能帮我写一个查询来做这样的事情吗:
[dbo].[TABLE_A](
[EmpID] [INT],
[FName] [varchar](50) NULL,
[LName] [varchar](50) NULL
)
[dbo].[TABLE_B](
[EmployeeActivity] [varchar](50) NULL,
[EmpID] [INT]
)
FOR EACH DISTINCT [EmployeeActivity] RETURN
[TABLE_B].[EmployeeActivity],
[TABLE_A].[FName],
[TABLE_A].[LName],
[TABLE_A].[EmpID],
CASE
WHEN ([TABLE_B].[EmployeeActivity] IS NULL) THEN ('NO')
ELSE 'YES'
END
结果应该如下所示:
FireDrill12, Bill, Jones, 342,YES
FireDrill13, Bill, Jones, 342,NO
FireDrill14, Bill, Jones, 342,YES
FireDrill12, Smith, Sue, 253,NO
FireDrill13, Smith, Sue, 253,NO
FireDrill14, Smith, Sue, 253,YES
我无法理解这件事
谢谢你的帮助
-AllenSQL无论如何都是一种基于集合的语言,因此它已经在执行“for each”,因此理论上,您可以执行交叉连接以获得每个组合,并使用相关查询进行检查,因此可能类似于:
SELECT DISTINCT
b.EmployeeActivity,
a.FName,
a.LName,
a.EmpId,
CASE
WHEN EXISTS (SELECT 1 FROM [TABLE_B] c WHERE c.[EmployeeActivity] = b.EmployeeActivity AND c.EmpId = a.EmpId) THEN 'YES'
ELSE 'NO'
END
FROM Table_b AS b
CROSS JOIN Table_a AS a
ON a.EmpId = b.EmpId
另一个版本使用
internal
join,但更正确的版本使用left
join,如@Blam所示
SELECT
A.*,
CASE
WHEN B.EmployeeActivity IS NULL THEN 'No'
ELSE 'Yes'
END
FROM
[dbo].[TABLE_A] A
INNER JOIN [dbo].[TABLE_B] B ON (A.EmpID = B.EmpID)
UNION
SELECT
A.*,
'No'
FROM
[dbo].[TABLE_A] A
WHERE
A.EmpID NOT IN (SELECT B.EmpID FROM [dbo].[TABLE_B] B)
你的每个。。。语句不是您想要的内容的正确说明。结果示例表看起来需要一个简单的连接!?而且示例数据没有意义。第一列中的EmployeeActivity从不为null,因此在最后一列中不会看到NO。要展开上一条注释,需要一条带有内部联接的SELECT语句。