【问题标题】:help with T-SQL on SQL Server 2005SQL Server 2005 上的 T-SQL 帮助
【发布时间】:2010-10-13 02:46:36
【问题描述】:

我有一个在下面工作的 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 | ---------------------------------


找到了解决方案,感谢 Jakob Christensen

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

谢谢,
德尔斯

【问题讨论】:

  • 不标记 [已解决] 接受答案

标签: sql-server-2005 tsql select


【解决方案1】:

这样就可以了:

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

【讨论】:

  • 脚本超时,我认为它会导致无限循环,也许可以稍微修复一下?
  • 我修复它显然我必须使用 wp_vtdid 分组
【解决方案2】:

您想在航点表中加入嵌套的 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 替换为您的主键字段。

【讨论】:

  • Msg 156, Level 15, State 1, Line 3 关键字'FROM'附近的语法错误。
  • 已删除违规错误。我故意没有提供完整的解决方案,以便您理解这些概念。
  • @John Nolan:这一行仍然存在语法故障:“(COUNT(UTIL ...”)
猜你喜欢
  • 2011-07-10
  • 2012-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多