2011-09-28 75 views
0

我真的认为这很容易。我想删除0(零)行

请参见下面的矩阵:

**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 

出于某种原因,当我们将数据添加到数据库,DB转换的2个额外的记录被添加。资源和时间添加了零。

我们希望不显示任何行,即使项目具有数据库转换值,“资源”和“小时数”值为null或0。

这里是我摆弄的代码,但不告诉我,比如,前4行,其中的资源和时间不为0

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 

我要么收到空白行或一行。请帮忙。

我希望这不是太麻烦。

非常感谢

回答

0

假设下表结构: MYTABLE(项目的EmpID); emp表(empID,hours,resources);

使用别名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 
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 
+0

非常感谢您的prompr响应。然而,这并没有奏效,因为它仍然显示空白记录。我甚至用@employeeid替换了我知道的db上的值。 – Kenny

+0

你确定你正在使用的EmployeeId存在于mytable和emptable吗? – Lamak

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 
+0

不,那没用。这太奇怪了!小时和资源数字,而不是字符串。对不起,这是不正确的。资源是字符串。 – Kenny

+0

然后我们错过了一些关于你的结构的关键信息。我会仔细检查一下,比如你在设置你的'@ employeeId'变量。 – 2011-09-28 03:53:16

+0

最奇怪的部分就像我所说的,我用硬编码值代替@employeeid,但仍然没有骰子。 – Kenny

1

你必须找出为什么多余的行越来越插入。一种方法是对行进行约束,以便插入失败并从那里向后工作。

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

至于你的问题,尝试把它分解成小部分:

  1. inner join和非零限制,并确保您能够选择的employeeId行,包括坏行。如果没有,你的雇员丢失

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

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

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 
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