优化SQL语句的问题

videowawa 2010-02-01 10:47:33
表TABLENAME,列MOVALUE M1VALUE …… M11VALUE,staticdate,stationid
需求是
SELECT COUNT(M0VALUE) FROM TABLENAME WHERE M0VALUE!=0 AND M0VALUE IS NOT NULL and month(staticdate)=@month and stationid = @stationid
SELECT COUNT(M1VALUE) FROM TABLENAME WHERE M0VALUE!=0 AND M0VALUE IS NOT NULL and month(staticdate)=@month and stationid = @stationid

……
SELECT COUNT(M11VALUE) FROM TABLENAME WHERE M0VALUE!=0 AND M0VALUE IS NOT NULL and month(staticdate)=@month and stationid = @stationid

然后在把这11条值相加。
但月份有3个,stationid有多个。这样的话就需要执行N*11次SQL语句,这样性能太低了。有没有什么好办法可以不用分11次去执行,一次就可以把这11列求出并相加?
不知道我表达是否够明白,望各位大侠赐教啊!
...全文
81 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
丰云 2010-02-01
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sql77 的回复:]
引用 7 楼 sql77 的回复:
那就这样啦,直接加起来可能还快点了,

SELCT

SUM(CASE WHEN M0VALUE!=0 AND M0VALUE IS NOT NULL  THEN 1 ELSE 0 END)+
SUM(CASE WHEN M0VALUE1!=0 AND M0VALUE1 IS NOT NULL  THEN 1 ELSE 0 END)...

FROM TB
WHERE month(staticdate)=@month and stationid = @stationid

我的意思是可能就你直接那样还快点,测试一下看看
[/Quote]
Good!
videowawa 2010-02-01
  • 打赏
  • 举报
回复
count(M0VALUE)+count(M1VALUE)+……+count(M11VALUE)
videowawa 2010-02-01
  • 打赏
  • 举报
回复
需要M0VALUE+M1VALUE+……+M11VALUE
丰云 2010-02-01
  • 打赏
  • 举报
回复
你是要M0VALUE+M1VALUE+……+M11VALUE
还是要SUM(M0VALUE)+ SUM(M1VALUE)+ ....+ SUM(M11VALUE)
??
videowawa 2010-02-01
  • 打赏
  • 举报
回复
谢谢SQL77兄,我先试试看
videowawa 2010-02-01
  • 打赏
  • 举报
回复
SELECT COUNT(*) FROM TABLENAME
WHERE M0VALUE!=0 AND M0VALUE IS NOT NULL
AND M1VALUE!=0 AND M1VALUE IS NOT NULL
.
.
.
AND M11VALUE!=0 AND M11VALUE IS NOT NULL
and month(staticdate) in (@month1 ,(@month2 ,(@month3 )
and stationid in (@stationid1, @stationid2,@stationid3,..)

这样算出来的应该是符合M1VALUE!=0 AND M1VALUE IS NOT NULL
.
.
.
AND M11VALUE!=0 AND M11VALUE IS NOT NULL
and month(staticdate) in (@month1 ,(@month2 ,(@month3 )
and stationid in (@stationid1, @stationid2,@stationid3,..)条件的有多少列,而不是M0VALUE+M1VALUE+……+M11VALUE了呀
SQL77 2010-02-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 sql77 的回复:]
那就这样啦,直接加起来可能还快点了,

SELCT

SUM(CASE WHEN M0VALUE!=0 AND M0VALUE IS NOT NULL  THEN 1 ELSE 0 END)+
SUM(CASE WHEN M0VALUE1!=0 AND M0VALUE1 IS NOT NULL  THEN 1 ELSE 0 END)...

FROM TB
WHERE month(staticdate)=@month and stationid = @stationid
[/Quote]
我的意思是可能就你直接那样还快点,测试一下看看
SQL77 2010-02-01
  • 打赏
  • 举报
回复
那就这样啦,直接加起来可能还快点了,

SELCT

SUM(CASE WHEN M0VALUE!=0 AND M0VALUE IS NOT NULL THEN 1 ELSE 0 END)+
SUM(CASE WHEN M0VALUE1!=0 AND M0VALUE1 IS NOT NULL THEN 1 ELSE 0 END)...

FROM TB
WHERE month(staticdate)=@month and stationid = @stationid
丰云 2010-02-01
  • 打赏
  • 举报
回复
SELECT COUNT(*) FROM TABLENAME
WHERE M0VALUE!=0 AND M0VALUE IS NOT NULL
AND M1VALUE!=0 AND M1VALUE IS NOT NULL
.
.
.
AND M11VALUE!=0 AND M11VALUE IS NOT NULL
and month(staticdate) in (@month1 ,(@month2 ,(@month3 )
and stationid in (@stationid1, @stationid2,@stationid3,..)
videowawa 2010-02-01
  • 打赏
  • 举报
回复
写错了,不全是 M0VALUE!=0,
应该
SELECT COUNT(M0VALUE) FROM TABLENAME WHERE M0VALUE!=0 AND M0VALUE IS NOT NULL and month(staticdate)=@month and stationid = @stationid
SELECT COUNT(M1VALUE) FROM TABLENAME WHERE M1VALUE!=0 AND M1VALUE IS NOT NULL and month(staticdate)=@month and stationid = @stationid

……
SELECT COUNT(M11VALUE) FROM TABLENAME WHERE M11VALUE!=0 AND M11VALUE IS NOT NULL and month(staticdate)=@month and stationid = @stationid
丰云 2010-02-01
  • 打赏
  • 举报
回复
上面的有多余的括号。。。

SELECT COUNT(*) FROM TABLENAME
WHERE M0VALUE!=0
AND M0VALUE IS NOT NULL
and month(staticdate) in (@month1 ,@month2 ,@month3 )
and stationid in (@stationid1, @stationid2,@stationid3,..)
丰云 2010-02-01
  • 打赏
  • 举报
回复
SELECT COUNT(*) FROM TABLENAME
WHERE M0VALUE!=0
AND M0VALUE IS NOT NULL
and month(staticdate) in (@month1 ,(@month2 ,(@month3 )
and stationid in (@stationid1, @stationid2,@stationid3,..)

黄_瓜 2010-02-01
  • 打赏
  • 举报
回复
[code=SQL]
--try
SELECT COUNT(M1VALUE)+COUNT(M1VALUE)+COUNT(M2VALUE)....COUNT(M11VALUE) FROM TABLENAME WHERE M0VALUE!=0 AND M0VALUE IS NOT NULL and month(staticdate)=@month and stationid = @stationid
[/code]
SQL77 2010-02-01
  • 打赏
  • 举报
回复
SELECT COUNT(M0VALUE)+COUNT(M1VALUE) +COUNT(M11VALUE) ..............
FROM TABLENAME WHERE M0VALUE!=0 AND M0VALUE IS NOT NULL and month(staticdate)=@month and stationid = @stationid
???????

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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