sql根据查询结果,去掉空值

mofeiovi 2012-01-07 04:09:14
select (select orgname from org as og where org.id=og.id),
(select count(*) from tb1 as t1 whree t1.id=org.id) as number1,
(select count(*) from tb2 as t2 whree t2.id=org.id) as number2,
(select count(*) from tb3 as t3 whree t3.id=org.id) as number3,
(select count(*) from tb4 as t4 whree t4.id=org.id) as number4,
(select count(*) from tb5 as t5 whree t5.id=org.id) as number5
from org as org,tb as tb where org.id=tb.id
group by org.name having count(*)>0

语句也就是这么个意思,现在是查出来了,可是有那么几行查询结果为0的也显示出来了,我不想显示全为0的这
一行记录
如下:
orgname ------number1-------number2-------number3-------number4------number5
aaaa-----------0--------------2--------------0-------------1------------0
bbbb-----------1--------------0--------------0-------------0------------0
cccc-----------0--------------0--------------0-------------0------------0
dddd-----------0--------------0--------------0-------------0------------0
eeee-----------0--------------1--------------0-------------1------------0

就是不取出number1,number2,number3,number4,number5全为0的这一行记录
求大师指明!!!!!

...全文
2752 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Spade_J 2012-01-08
  • 打赏
  • 举报
回复
把你原先的结果集当做表表达式,不是直接使用别名作为条件,应该没有问题的
mofeiovi 2012-01-08
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 spade_j 的回复:]
SQL code


select * from
(
select (select orgname from org as og where org.id=og.id),
(select count(*) from tb1 as t1 whree t1.id=org.id) as number1,
(select count(*) from tb2 as t2 whree t2.i……
[/Quote]


这样做条件不行的哇。。。
给别人一提醒,我才又想到这个。。。
select * from
(
select (select orgname from org as og where org.id=og.id),
(select count(*) from tb1 as t1 whree t1.id=org.id) as number1,
(select count(*) from tb2 as t2 whree t2.id=org.id) as number2,
(select count(*) from tb3 as t3 whree t3.id=org.id) as number3,
(select count(*) from tb4 as t4 whree t4.id=org.id) as number4,
(select count(*) from tb5 as t5 whree t5.id=org.id) as number5
from org as org,tb as tb where org.id=tb.id
group by org.name having count(*)>0
) A
where (select count(*) from tb1 as t1 whree t1.id=org.id)+
(select count(*) from tb2 as t2 whree t2.id=org.id)+(select count(*) from tb3 as tb3 whree tb3.id=org.id).....=0 这样来做条件,不用number做条件,虽然看起来语句长了点,但是应该 可以了哇。。。
好了洗澡睡觉了,明天还早起呢。楼上的,谢谢了啊
Spade_J 2012-01-08
  • 打赏
  • 举报
回复

select * from
(
select (select orgname from org as og where org.id=og.id),
(select count(*) from tb1 as t1 whree t1.id=org.id) as number1,
(select count(*) from tb2 as t2 whree t2.id=org.id) as number2,
(select count(*) from tb3 as t3 whree t3.id=org.id) as number3,
(select count(*) from tb4 as t4 whree t4.id=org.id) as number4,
(select count(*) from tb5 as t5 whree t5.id=org.id) as number5
from org as org,tb as tb where org.id=tb.id
group by org.name having count(*)>0
) A
where number1+number2+number3+number4+number5<>0

这么写应该没有问题的
mofeiovi 2012-01-08
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 snbxp 的回复:]
行不行楼主试一下再说
[/Quote]


试过了,还取过全部number2+...=0这也做过条件,不行的。好像在mysql里别名是可以做为条件来查询的。。。

谢谢你了,这么晚了还回答我的问题。
snbxp 2012-01-08
  • 打赏
  • 举报
回复
行不行楼主试一下再说
mofeiovi 2012-01-08
  • 打赏
  • 举报
回复
那看来还真只有这样写了。。。。。
楼上的这样不行的,用别名做条件查询不行的,会提示number1,number2...无效。我用的是sql server 2008.....悲催啊。
因为我查询返回的是一个分页集合,我又琢磨了下,在action里面把查询结果集合里面的这一行number1,number2...等全为0的记录把它去掉
snbxp 2012-01-07
  • 打赏
  • 举报
回复
select * from
(select (select orgname from org as og where org.id=og.id),
(select count(*) from tb1 as t1 whree t1.id=org.id) as number1,
(select count(*) from tb2 as t2 whree t2.id=org.id) as number2,
(select count(*) from tb3 as t3 whree t3.id=org.id) as number3,
(select count(*) from tb4 as t4 whree t4.id=org.id) as number4,
(select count(*) from tb5 as t5 whree t5.id=org.id) as number5
from org as org,tb as tb where org.id=tb.id
group by org.name having count(*)>0
)A
where number1+number2+number3+number4+number5<>0
郗晓勇 2012-01-07
  • 打赏
  • 举报
回复
没有办法只有2楼那样一列一列的加上去.
yubofighting 2012-01-07
  • 打赏
  • 举报
回复
查询结果后在加sum列,sum为0的排除
mofeiovi 2012-01-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 sql77 的回复:]
select (select orgname from org as og where org.id=og.id),
(select count(*) from tb1 as t1 whree t1.id=org.id) as number1,
(select count(*) from tb2 as t2 whree t2.id=org.id) as number2,
(select co……
[/Quote]



我现在子查询有十九条number1.......number19,这样的话,在where里面岂不是
select count(*) from tb1 as t1 whree t1.id=org.id)>0 or同样也要写十九条?好像语句有点太多了,还有别的方法没啊
mofeiovi 2012-01-07
  • 打赏
  • 举报
回复
先谢谢楼上了,回头我再测试下。。。。。。

还有别的方法没啊
SQL77 2012-01-07
  • 打赏
  • 举报
回复
select (select orgname from org as og where org.id=og.id),
(select count(*) from tb1 as t1 whree t1.id=org.id) as number1,
(select count(*) from tb2 as t2 whree t2.id=org.id) as number2,
(select count(*) from tb3 as t3 whree t3.id=org.id) as number3,
(select count(*) from tb4 as t4 whree t4.id=org.id) as number4,
(select count(*) from tb5 as t5 whree t5.id=org.id) as number5
from org as org,tb as tb where org.id=tb.id
and (
(select count(*) from tb1 as t1 whree t1.id=org.id)>0 or (select count(*) from tb2 as t2 whree t2.id=org.id)>0 or ...)
group by org.name having count(*)>0
mofeiovi 2012-01-07
  • 打赏
  • 举报
回复
如何去掉查询结果为number全部为0的记录,求助
一、SQL 结构化查询语言 包括DDL(数据定义语言)、DCL(数据控制语言)、 DQL(数据查询语言)、DML(数据操纵语言) 二、SQL的特点 SQL 语句不区分大小写 SQL 语句能输入一行或多行 关键字不能整行缩写或分离 子句通常被放置在分开的行上 缩进可提高可读性 在SQL 开发工具,SQL 语句能选择分号结束(;) .当你运行多个SQL 语句的时候,需要分号 在SQL*Plus中, 你要用一个分号结束每个SQL 语句.(;) 三、SQL*PLUS特征: 字符日期左对齐 数字右对对齐 列名默认大写 SQL PLUS 自己的命令不需以分号“;”结束 四、SQL查询时,数字和日期类型的数据可用算术运算符 + 加 - 减 * 乘 / 除 ( ) 用于改变运算符的优先级 五、空值 空值一般用NULL表示 一般表示未知的、不确定的值,也不是空格 一般运算符与其进行运算时,都会为空 空不与任何值相等 表示某个列为空用:IS NULL 不能使用COMM=NULL这种形式 某个列不为空:IS NOT NULL 不能使用COMM != NULL 这种形式 空值在作升序排列时,空值会放到最后。 相反作降序排列时,空值会放在最前。 空值作逻辑运算时: AND运算: F AND F =F F AND T =F F AND NULL =F T AND F =F T AND T =T T AND NULL IS NULL NULL AND F =F NULL AND T IS NULL NULL AND NULL IS NULL 就是说AND的优先级是:F ->NULL ->T OR运算: T OR T =T T OR F =T T OR NULL =T F OR T =T F OR F =F F OR NULL IS NULL NULL OR T =T NULL OR F IS NULL NULL OR NULL IS NULL OR运算优先级:T ->NULL ->F NOT运算: NOT T =F NOT F =T NOT NULL IS NULL 与空值相关的函数: NVL 函数 格式:NVL(表达式1,表达式2) 作用:测试表达式的值,如果表达式1为空,则返回表达式2的值;不为空,返回表达式1的值。 NVL2 函数 格式:NVL2(表达式1,表达式2,表达式3) 作用:测试表达式的值,表达式1不为空,返回表达式2的值,如果为空,则返回表达式3的值。 NULLIF 相等为空 格式:NULLIF (表达式1,表达式2) 作用:比较表达式1和表达式2的值,如果两个相等则返回为空,否则返回表达式1的值。 COALESCE 找非空 格式:COALESCE (表达式1,表达式2,表达式3,...,表达式n) 作用:返回第一个不为空的值,如果所有的都为空,则返回NULL。 六、SELECT语句的用法 SELECT *|{[DISTINCT] column|expression [alias],...} FROM table; 七、演示 */ --选择所有字段 SQL> SET LINESIZE 200 SQL> SELECT * FROM SCOTT.EMP; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 --选择部分字段 SQL> SELECT EMPNO,ENAME,SAL FROM SCOTT.EMP; EMPNO ENAME SAL ---------- ---------- ---------- 7369 SMITH 800 7499 ALLEN 1600 7521 WARD 1250 --算术加减运算 SQL> SELECT EMPNO,ENAME,SAL + 300 FROM SCOTT.EMP; EMPNO ENAME SAL+300 ---------- ---------- ---------- 7369 SMITH 1100 7499 ALLEN 1900 7521 WARD 1550 --优先级 SQL> SELECT EMPNO,ENAME,12 * (SAL + 300) FROM SCOTT.EMP; EMPNO ENAME 12*(SAL+300) ---------- ---------- ------------ 7369 SMITH 13200 7499 ALLEN 22800 7521 WARD 18600 SQL> SELECT EMPNO,ENAME,12 * SAL + 300 FROM SCOTT.EMP; EMPNO ENAME 12*SAL+300 ---------- ---------- ---------- 7369 SMITH 9900 7499 ALLEN 19500 7521 WARD 15300 --NULL,记录中COMM存在为NULL的情况 SQL> SELECT EMPNO,ENAME,SAL,COMM FROM SCOTT.EMP; EMPNO ENAME SAL COMM ---------- ---------- ---------- ---------- 7369 SMITH 800 7499 ALLEN 1600 300 7521 WARD 1250 500 7566 JONES 2975 --与NULL运算,结果为NULL SQL> SELECT EMPNO,ENAME,SAL,COMM + 300 FROM SCOTT.EMP; EMPNO ENAME SAL COMM+300 ---------- ---------- ---------- ---------- 7369 SMITH 800 7499 ALLEN 1600 600 7521 WARD 1250 800 7566 JONES 2975 --将COMM不为NULL的记录的COMM乘以 SQL> SELECT EMPNO,ENAME,SAL,COMM * 12 FROM SCOTT.EMP WHERE COMM IS NOT NULL EMPNO ENAME SAL COMM*12 ---------- ---------- ---------- ---------- 7499 ALLEN 1600 3600 7521 WARD 1250 6000 7654 MARTIN 1250 16800 7844 TURNER 1500 0 --字段别名,字段后用AS 别名,AS可以省略 SQL> SELECT EMPNO,ENAME AS EmpName,SAL Salary FROM SCOTT.EMP; EMPNO EMPNAME SALARY ---------- ---------- ---------- 7369 SMITH 800 7499 ALLEN 1600 7521 WARD 1250 7566 JONES 2975 --DISTINCT,过滤重复行 SQL> SELECT DISTINCT EMPNO,ENAME FROM SCOTT.EMP; --连接操作符,通过二个垂直的条描述(||),注意,日期和文字数值一定嵌入在单引号里面 SQL> SELECT EMPNO,ENAME || ' IS A ' ||JOB AS POSITION FROM SCOTT.EMP; EMPNO POSITION ---------- ------------------------- 7369 SMITH IS A CLERK 7499 ALLEN IS A SALESMAN 7521 WARD IS A SALESMAN --DESC table_name,显示表结构信息 SQL> DESC SCOTT.EMP Name Null? Type ----------------------------------------- -------- ---------------------------- EMPNO NOT NULL NUMBER(4) ENAME VARCHAR2(10) JOB VARCHAR2(9) MGR NUMBER(4) HIREDATE DATE SAL NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NUMBER(2) --NVL的用法 SQL> SELECT EMPNO,ENAME,NVL(TO_CHAR(COMM),'Not Applicable') FROM SCOTT.EMP; EMPNO ENAME NVL(TO_CHAR(COMM),'NOTAPPLICABLE') ---------- ---------- ---------------------------------------- 7369 SMITH Not Applicable 7499 ALLEN 300 7521 WARD 500 7566 JONES Not Applicable --NVL2的用法 SQL> SELECT empno,ename,sal,NVL2(TO_CHAR(comm),12 * (sal + comm),sal) AS Income FROM scott.emp; EMPNO ENAME SAL INCOME ---------- ---------- ---------- ---------- 7369 SMITH 800 800 7499 ALLEN 1600 22800 7521 WARD 1250 21000 7566 JONES 2975 2975 --NULLIF的用法 --等价于CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END SQL> SELECT e.last_name, NULLIF(e.job_id, j.job_id) "Old Job ID" 2 FROM hr.employees e, hr.job_history j 3 WHERE e.employee_id = j.employee_id 4 ORDER BY last_name, "Old Job ID"; LAST_NAME Old Job ID ------------------------- ---------- De Haan AD_VP Hartstein MK_MAN Kaufling ST_MAN Kochhar AD_VP Kochhar AD_VP Raphaely PU_MAN Taylor SA_REP Taylor Whalen AD_ASST Whalen --下面是使用CASE WHEN的等价用法 SQL> SELECT e.last_name, CASE WHEN e.job_id = j.job_id THEN NULL ELSE e.job_id END AS "Old Job ID" 2 FROM hr.employees e, hr.job_history j 3 WHERE e.employee_id = j.employee_id 4 ORDER BY last_name, "Old Job ID"; LAST_NAME Old Job ID ------------------------- ---------- De Haan AD_VP Hartstein MK_MAN Kaufling ST_MAN Kochhar AD_VP Kochhar AD_VP Raphaely PU_MAN Taylor SA_REP Taylor Whalen AD_ASST Whalen --COALESCE的用法 --当COALESCE(exp1,exp2)包含两个表达式时,等价于CASE WHEN exp1 IS NOT NULL THEN exp1 ELSE exp2 END --COALESCE (expr1, expr2, ..., exprn), for n>=3 --当n >= 3时,等价于 --CASE WHEN expr1 IS NOT NULL THEN expr1 -- ELSE COALESCE (expr2, ..., exprn) END SQL> SELECT product_id, list_price, min_price, 2 COALESCE(0.9*list_price, min_price, 5) "Sale" 3 FROM oe.product_information 4 WHERE supplier_id = 102050 5 ORDER BY product_id, list_price, min_price, "Sale" PRODUCT_ID LIST_PRICE MIN_PRICE Sale ---------- ---------- ---------- ---------- 1769 48 43.2 1770 73 73 2378 305 247 274.5 2382 850 731 765 3355 5 八、更多

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧