помогите с T-SQL на SQL Server 2005 - PullRequest
0 голосов
/ 13 марта 2009

У меня есть 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 | RUN | IDLE | OFF |
---------------------------------
| 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

Спасибо,
Dels

Ответы [ 2 ]

2 голосов
/ 13 марта 2009

Это поможет:

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
2 голосов
/ 13 марта 2009

Вы хотите присоединиться к своим вложенным операторам SQL в таблице путевых точек.

Это не проверено, но посмотрите, что я здесь сделал:

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 на поле первичного ключа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...