【发布时间】:2013-07-11 17:11:46
【问题描述】:
我有一个表 NETWORKS,其中每个网络可以有多个 CIRCUITS。每个网络都有一个整体状态(红色/黄色/绿色),每个电路都有一个单独的状态(红色/绿色)。每个电路的状态都是手动设置的。网络状态如下:
- 如果它的所有电路都是绿色的 --> 绿色
- 如果它的所有电路都是红色的 --> 红色
- 如果至少 1 个(但不是全部)电路为绿色 --> 黄色
- 如果没有电路 --> NULL(无状态)
我正在尝试选择所有网络,它们的状态由 SELECT 动态确定,而不必将状态作为表中的一列保存和管理。我想不出一种有效的方法来做到这一点。我现在的工作(都是小表,
SELECT
(CASE
WHEN (
SELECT COUNT(*)
FROM NETWORK_CIRCUITS
WHERE network_id = N.network_id
) = 0 THEN 'noStatus'
WHEN (
SELECT COUNT(*)
FROM NETWORK_CIRCUITS
WHERE network_id = N.network_id
AND [status] = 'greenStatus'
) = (
SELECT COUNT(*)
FROM NETWORK_CIRCUITS
WHERE network_id = SSN.network_id
) THEN 'greenStatus'
WHEN (
SELECT COUNT(*)
FROM NETWORK_CIRCUITS
WHERE network_id = N.network_id
AND [status] = 'redStatus'
) = (
SELECT COUNT(*)
FROM NETWORK_CIRCUITS
WHERE network_id = N.network_id
) THEN 'redStatus'
ELSE 'yellowStatus'
END) network_status
FROM NETWORKS N
【问题讨论】:
标签: sql