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
我想要完成的是显示不同的数据,但如果特定行具有特定数据,也会在每一行上显示一个字段。
让我感到困惑的是,我仍然需要它是不同的,如果我尝试进行另一个连接,我会得到更多的行..
我只是希望保留我正在检索的相同结果,但有一个额外的列告诉我 - 这个设备(行)需要维修,因为至少它的一个属性如此......希望这是有道理的,不确定我是否在这里清楚地解释了自己。
主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