0

以下で動作するT-SQLがあります:


SELECT WP_VTDID AS UTIL_VTDID, 
(SELECT COUNT(WP_ENGINE) FROM WAYPOINTS WHERE (WP_ENGINE = 1) AND (WP_SPEED > 0) AND WP_VTDID='L083') AS UTIL_RUN,
(SELECT COUNT(WP_ENGINE) FROM WAYPOINTS WHERE (WP_ENGINE = 1) AND (WP_SPEED = 0) AND WP_VTDID='L083') AS UTIL_IDLE,
(SELECT COUNT(WP_ENGINE) FROM WAYPOINTS WHERE (WP_ENGINE = 0) AND WP_VTDID='L083') AS UTIL_OFF
FROM WAYPOINTS
WHERE WP_VTDID = 'L083' AND WP_DATETIME BETWEEN '2009-03-13 00:00:00' AND '2009-03-13 23:59:59'
GROUP BY WP_VTDID


ただし、複数のWP_VTDID値があり、すべてのデータをフェッチしたいのですが、複数の値に対して機能する T-SQL コマンドを作成できますか? (値は既にデータベースにあります)

PS:今 のところ WP_DATETIME

を無視してください。 したがって、結果は次のようになります。

----------------------------------
| | UTIL_VTDID | 実行 | アイドル | オフ |
----------------------------------
| | L083 | 100 | 20 | 0 |
| | L084 | 200 | 50 | 10 |
| | L085 | 60 | 30 | 50 |
| | L086 | 0 | 0 | 100 |
----------------------------------


ヤコブ・クリステンセン のおかげで解決策を見つけました

SELECT WP_VTDID AS UTIL_VTDID, 
(SELECT COUNT(WP_ENGINE) FROM WAYPOINTS WHERE (WP_ENGINE = 1) AND (WP_SPEED > 0) AND WP_VTDID=t.WP_VTDID) AS UTIL_RUN,
(SELECT COUNT(WP_ENGINE) FROM WAYPOINTS WHERE (WP_ENGINE = 1) AND (WP_SPEED = 0) AND WP_VTDID=t.WP_VTDID) AS UTIL_IDLE,
(SELECT COUNT(WP_ENGINE) FROM WAYPOINTS WHERE (WP_ENGINE = 0) AND WP_VTDID=t.WP_VTDID) AS UTIL_OFF
FROM WAYPOINTS t
WHERE WP_DATETIME BETWEEN '2009-03-13 00:00:00' AND '2009-03-13 23:59:59'
GROUP BY WP_VTDID

ありがとう、
デルス

4

2 に答える 2

2

ウェイポイント テーブルでネストされた SQL ステートメントを JOIN したいとします。

これはテストされていませんが、ここで行ったことを確認してください。

SELECT 
     WAYPOINTS.WP_VTDID AS UTIL_VTDID, 
     COUNT(UTIL_RUN.WP_ENGINE) AS UTIL_RUN
FROM WAYPOINTS
JOIN WAYPOINTS  UTIL_RUN ON
    WAYPOINTS.PKEY=UTIL_RUN.PKEY
AND (UTIL_RUN.WP_ENGINE = 1) AND (UTIL_RUN.WP_SPEED > 0)
WHERE WAYPOINTS.WP_DATETIME BETWEEN '2009-03-13 00:00:00' AND '2009-03-13 23:59:59'
GROUP BY WAYPOINTS.WP_VTDID

他の値に参加するだけです。

主キー フィールドを pkey に置き換えます。

于 2009-03-13T09:14:47.540 に答える
2

これはトリックを行います:

SELECT DISTINCT
WP_VTDID AS UTIL_VTDID, 
(
    SELECT COUNT(WP_ENGINE) 
    FROM WAYPOINTS 
    WHERE (WP_ENGINE = 1) 
    AND (WP_SPEED > 0) 
    AND WP_VTDID = t.WP_VTDID
) AS UTIL_RUN,
(
    SELECT COUNT(WP_ENGINE) 
    FROM WAYPOINTS 
    WHERE (WP_ENGINE = 1) 
    AND (WP_SPEED = 0) 
    AND WP_VTDID = t.WP_VTDID
) AS UTIL_IDLE,
(
    SELECT COUNT(WP_ENGINE) 
    FROM WAYPOINTS 
    WHERE (WP_ENGINE = 0) 
    AND WP_VTDID = t.WP_VTDID
) AS UTIL_OFF
FROM WAYPOINTS t
于 2009-03-13T09:17:05.320 に答える