|
我有一个存储过程,如下所示:* {4 u E+ H$ o% I
CREATE PROC [dbo].[Incidents]- ?0 _* i. G4 ~
(@SiteName varchar(200))
; @. L8 q z7 ?' D! n( M! O8 OAS
, \# ~: M# I" J0 oSELECT# E% g3 G' D2 C e" F0 F3 u
( $ ]7 y4 L+ t* M: J4 Q# A! z. l' G
SELECT SUM(i.Logged)
/ |# L/ {$ x" Z FROM tbl_Sites s
( n8 H7 d4 s7 e6 O1 b INNER JOIN tbl_Incidents i
! j2 k x. \, W+ [- { ON s.Location = i.Location
- u. u$ M* V8 F6 e$ A WHERE s.Sites = @SiteName AND i.[month] = DATEADD(mm, DATEDIFF(mm, 0, GetDate()) -1,0) 9 k9 t7 l0 I/ } B
GROUP BY s.Sites
2 k P; N$ M) ~) AS LoggedIncidents
2 E/ A# h9 O$ _5 b4 F'tbl_Sites contains a list of reported on sites.
+ b l* U+ j( d0 F. Z'tbl_Incidents contains a generated list of total incidents by site/date (monthly)
1 B' H) e% B8 W: @'If a site doesn't have any incidents that month it wont be listed.
$ g6 H" m& n4 v3 Q我遇到的问题是,该站点本月没有任何事件,因此当我运行此proc时,我为该站点返回了NULL值,但是我需要返回零/ 0以便在内部使用SSRS中的图表。/ w) o l2 g! q7 ]) Z
我曾尝试使用合并和isull无济于事。4 ]& E9 D: ~) Y4 r9 B2 V7 F
SELECT COALESCE(SUM(c.Logged,0))
/ d) j! b' ?% i5 [ SELECT SUM(ISNULL(c.Logged,0))
6 j' {4 E) N2 r9 X. @有没有一种方法可以正确格式化此格式?: g+ l5 a- @' T. F4 s. s$ v1 X
干杯,2 [' ]7 k8 a, T
背风处! w: i# f1 ^ M! j8 M
7 G3 V9 c6 S N6 s' N: |$ {& @解决方案:
g& U, r% d8 K+ S- ^$ i. Y * G1 V. m& G# {# z$ N: Z' m
. L& f7 d, }+ H2 Z5 Y
" O( k5 s; C; _: D' Y, k$ f 放在外面:
7 r: D" d* y7 }: i; I5 eSELECT COALESCE(
1 { G7 G+ q$ L+ _6 }(
) d0 z; I% p! Z0 ?7 i SELECT SUM(i.Logged) . U; d( x y" [# T& |$ g6 b
FROM tbl_Sites s
: g/ m1 k) l" I3 P" m* F+ A INNER JOIN tbl_Incidents i ( U, ^: X, V# _6 _2 H
ON s.Location = i.Locatio餃﹏ ! N* \* s% F: m( W6 z n+ \
WHERE s.Sites = @SiteName AND i.[month] = DATEADD(mm, DATEDIFF(mm, 0, GetDate()) -1,0)
4 o1 l: w- ?6 r0 [ GROUP BY s.Sites 5 v0 P7 I9 H0 t. a% a% P( W
), 0) AS LoggedIncidents6 b+ q( L* _3 G, F
如果要返回多行,请将INNER JOIN更改为 LEFT JOIN5 j' p4 D, `: S4 R# I
SELECT COALESCE(SUM(i.Logged),0); Z2 \9 n; v' v% w2 j
FROM tbl_Sites s & w+ K4 S; a( E# f$ Y" t( z. @
LEFT JOIN tbl_Incidents i . I. [% w4 i, n" g+ v
ON s.Location = i.Locatio餃﹏
- y' _$ E3 r: {- K* U& ~1 `WHERE s.Sites = @SiteName AND i.[month] = DATEADD(mm, DATEDIFF(mm, 0, GetDate()) -1,0) 5 e. @2 z7 l8 @1 v) }- z
GROUP BY s.Sites
/ ~) H: B3 {% @6 l; q ^顺便说一句,如果没有保证,请勿在聚合函数中放置任何函数或表达式,例如,不要在ISUM中放置ISNULL,COALESCE,在聚合内部使用函数/表达式削弱性能,查询将通过表扫描执行 |
|