SQL 显示不同的记录并在找到特定数据时包含一个字段

SQL Display Distinct records and include a field if certain data is found

我想要完成的是显示不同的数据,但如果特定行具有特定数据,也会在每一行上显示一个字段。

让我感到困惑的是,我仍然需要它是不同的,如果我尝试进行另一个连接,我会得到更多的行..

我只是希望保留我正在检索的相同结果,但有一个额外的列告诉我 - 这个设备(行)需要维修,因为至少它的一个属性如此......希望这是有道理的,不确定我是否在这里清楚地解释了自己。

主Table(检查Table)

在上面table中,注意FK_Sequence每个条目大约有17个,用户需要回答OK或REPAIR(这是FK_Status

我当前的查询如下,结果只是一名员工和他们工作的设备。

SELECT DISTINCT
            a.EnteredDate,
            bb.EmployeeId,
            bb.EmployeeName,
            dd.EquipmentId,
            dd.EquipmentName

            FROM dbo.PIT_Inspection a

            INNER JOIN dbo.EmployeeName bb
            ON a.FK_EmployeeName = bb.PK_EmployeeName

            INNER JOIN dbo.EquipmentName dd
            ON a.FK_EquipmentName = dd.PK_EquipmentName

上述查询的结果:

但是这就是我的问题所在。请注意第 19 行 2 的 Main Table - FK_Status ..我想检测这个和这个特定的上面 table 中名为 StatusName.

的附加列中的员工显示器维修

您可以使用 GROUP BY 而不是 DISTINCT 来执行此操作,然后您可以使用条件计数来查看有多少行的状态为 2,如果它超过 [=16] =] 然后显示 REPAIR

SELECT  a.EnteredDate,
        bb.EmployeeId,
        bb.EmployeeName,
        dd.EquipmentId,
        dd.EquipmentName,
        StatusName = CASE WHEN COUNT(CASE WHEN a.FK_Status = 2 THEN 1 END) > 0 
                            THEN 'REPAIR' 
                            ELSE '' 
                        END
FROM dbo.PIT_Inspection a

INNER JOIN dbo.EmployeeName bb
ON a.FK_EmployeeName = bb.PK_EmployeeName

INNER JOIN dbo.EquipmentName dd
ON a.FK_EquipmentName = dd.PK_EquipmentName

GROUP BY a.EnteredDate, bb.EmployeeId, bb.EmployeeName, dd.EquipmentId, dd.EquipmentName;

将具有 distinct 的查询作为子查询,然后加入以获取 "additional information"。大致如下:

SELECT (your orig fields, but take from inspection where you took from a)
FROM 
    (SELECT DISTINCT a.FK_EmployeeName, a.EnteredDate, FK_EquipmentName
    FROM dbo.PIT_Inspection a) inspection
INNER JOIN dbo.EmployeeName bb
        ON inspection.FK_EmployeeName = bb.PK_EmployeeName

        INNER JOIN dbo.EquipmentName dd
        ON inspection.FK_EquipmentName = dd.PK_EquipmentName 

试试这个:

SELECT 
  a.EnteredDate,
  bb.EmployeeId,
  bb.EmployeeName,
  dd.EquipmentId,
  dd.EquipmentName,
  CASE WHEN SUM(CASE FK_Status WHEN 2 THEN 1 ELSE 0 END) > 0 
       THEN 'Repair' ELSE 'OK' END AS StatusName
FROM dbo.PIT_Inspection a
  INNER JOIN dbo.EmployeeName bb
    ON a.FK_EmployeeName = bb.PK_EmployeeName
  INNER JOIN dbo.EquipmentName dd
    ON a.FK_EquipmentName = dd.PK_EquipmentName
GROUP BY
  a.EnteredDate,
  bb.EmployeeId,
  bb.EmployeeName,
  dd.EquipmentId,
  dd.EquipmentName