Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server TSQL-对于每个like语句_Sql Server_Tsql - Fatal编程技术网

Sql server TSQL-对于每个like语句

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

我想为每一个类似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 [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
我无法理解这件事

谢谢你的帮助


-Allen

SQL无论如何都是一种基于集合的语言,因此它已经在执行“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语句。