我想删除0(零)的行

时间:2011-09-28 03:14:18

标签: sql sql-server-2005

老实说,我觉得这很容易。

请参阅以下矩阵:

**Project           Resources            Hours**
TeamSite          Web Developer         30
RFP               Technical Writer      45
Db Conversion     DBA                   20
DB Conversion     DB Developer          25
DB Conversion     0                     0
DB Conversion     0                     0

出于某种原因,当我们向数据库添加数据时,会添加2个额外的数据库转换记录。资源和小时数已添加零。

我们不希望显示任何行,其中Resources和Hours的值为null或0,即使Project具有DB转换值。

以下是我正在玩的代码,但没有告诉我,例如,资源和小时数不为0的前4行。

SELECT project, Hours, Resources
                         FROM mytable
                         inner join empTable ON myTable.employeeID = empTable.employeeID
                         and empTable.employeeID = '@employeeId' AND (Resources <> 0 and Hours <> 0)
 ORDER BY empTable.employeeID

我要么是空白,要么是一排。请帮忙。

我希望这不是太麻烦。

非常感谢

6 个答案:

答案 0 :(得分:1)

我认为您的问题与您使用参数的方式有关。它不应该包含在'中。试试这个:

SELECT project, Hours, Resources
FROM mytable
inner join empTable ON myTable.employeeID = empTable.employeeID
WHERE empTable.employeeID = @employeeId AND (Resources <> 0 and Hours <> 0)
ORDER BY empTable.employeeID

答案 1 :(得分:1)

您必须找出插入额外行的原因。一种方法是在行上设置约束,以便插入失败并从那里向后工作。

I am either getting blank or one row. Please help.

至于你的问题,试着把它分成几个小部分:

  1. 删除inner join和非零约束,并确保能够为employeeId选择行,包括坏行。如果没有,您的employeeId缺失

  2. '0'添加约束(Resources,而不是0)并确保您只能选择好的行。如果不是你没有写正确的谓词或你没有好的行

  3. 添加inner join并确保相同的结果。如果不是,则主表中没有行。这是一件坏事,因为您有不存在员工的项目时间。

答案 2 :(得分:0)

试试这个:

SELECT project, Hours, Resources
FROM mytable
inner join empTable 
ON myTable.employeeID = empTable.employeeID
WHERE empTable.employeeID = @employeeId 
AND (Resources <> '0' and Hours > 0)  
ORDER BY empTable.employeeID 

答案 3 :(得分:0)

我认为您应该使用在ORDER BY子句中使用的表名。这将有很大帮助。

SELECT table_name.project, table_name.Hours, table_name.Resources
                         FROM mytable
                         inner join empTable ON myTable.employeeID = empTable.employeeID
                         where table_name.Resources is not null and table_name.Hours is not null and table_name.Resources <> '0'
                         and table_name.Hours <> '0' ORDER BY empTable.employeeID

答案 4 :(得分:0)

你得到“一排”吗?也许它是与empTable.employeeID相对应的行。 如果你想要4行,试试这个:

SELECT project, Hours, Resources
FROM mytable
inner join empTable 
ON myTable.employeeID = empTable.employeeID
WHERE Resources <> '0' and Hours > 0
ORDER BY empTable.employeeID

答案 5 :(得分:0)

假设有以下表结构: MYTABLE(项目,的EmpID); empTable(EMPID,小时,资源);

使用别名e和m,可以更加优化以获得快速结果。

SELECT m.project, e.Hours, e.Resources
FROM mytable m
     inner join 
     empTable e
     ON (
     m.employeeID = e.employeeID 
     AND 
     e.employeeID = @employeeId
     AND 
    (e.Resources <> '0' AND e.Hours>0)
    )

 ORDER BY e.employeeID