|
我真的需要一个具有简单总和的表上的计算列。
( T8 y. h- L: V请看下面:! T, J( u. l1 b( F
SELECT key38 J/ Y- s( u7 J5 F
,SUM(UTOTALWBUD)
% m8 l5 k1 o+ e% _FROM CONTACT1
4 Z9 f+ c5 b+ A. Q INNER JOIN CONTACT2$ K' B- ], E; ^3 |$ [/ d' u
ON CONTACT1.ACCOUNTNO = CONTACT2.ACCOUNTNO
0 z! c' w3 w; j9 R' H e$ e3 MWHERE KEY1 = 'Client'
1 A {; p6 [, n; \2 hGROUP BY KEY3
0 `/ x Z# p7 M; V' x. }我试图通过添加以下内容来创建计算列
' K7 p2 L J% D- s+ m* YALTER TABLE ManagerTaLog
1 z x& z% F" C h* d# o, ]ADD WeeklyBudget as ( SELECT
) }0 d- X9 E' O) V" ^: p2 r, E key3
4 ^" ]6 ?& Q8 F ,SUM(UTOTALWBUD)
" M Q- m7 d) ]5 p FROM CONTACT1, k* }0 G4 u K+ ~
JOIN CONTACT2
; F; t6 B" g" h5 `. C% l ON CONTACT1.ACCOUNTNO = CONTACT2.ACCOUNTNO
" Q. P& J. q) l4 w$ k WHERE KEY1 = 'Client'+ [/ P2 ]; i: `- M
GROUP BY KEY3)
8 w% d! ?# z5 R* T我收到错误消息:' Y1 g* V2 D, H
0 [) H$ X2 [9 ^5 _8 e/ L
在这种情况下,不允许消息1046,级别15,状态1,第4行子查询。仅允许标量表达式。9 [1 m1 ?& _) r( {- z8 X, R( |! B
2 i4 Y5 t3 X5 {7 z8 t, k
请告知我该怎么办。
6 u* S/ p8 H& W( `2 }9 T非常感谢2 e+ [* M0 ~4 N0 q! X& s7 ]
第2部分
' x$ B* D8 ~ n6 B' V2 l+ ?& \我已经创建了一个函数;但是,我得到空值,请指教。
% Q& |3 ^* H# j3 V d: J5 P' ]CREATE FUNCTION [dbo].[SumIt](@Key3 varchar)( g3 ]/ a+ d% @& m0 x9 c% m
RETURNS TABLE * T) Y: C' v! {/ U9 w1 _
AS
8 \7 a! {. j9 G5 J9 sRETURN
) J! Z$ b; V2 i7 _- ~) M! t) r3 [! J" m(
9 u3 \% T8 p1 z& NSELECT SUM(UTOTALWBUD)5 i. L4 ~2 R( U
FROM CONTACT1
, t$ m: D- X) Q3 t4 {2 U JOIN CONTACT27 x4 d# Z2 D8 F% l
ON CONTACT1.ACCOUNTNO = CONTACT2.ACCOUNTNO' H. d" Q' z) T# o
JOIN Phone_List
, a' z( f8 b E4 x ON CONTACT1.KEY3 = Phone_List.[Manager ]
6 r2 Z; e6 T" c: w) q: FWHERE KEY1 = 'Client'
3 N! `+ h8 d) y1 |) j, ~ AND Phone_List.[Manager ] = @Key33 t. M5 g# |9 }. M$ A' q
GROUP BY [Manager ]% }% T# [$ @- Z* }$ x3 }* y' A
)
' y# F5 K) K# x6 qEND- I9 S" ~3 W5 ]6 C
GO& x" Q* b( Y' S/ I: m, {
只需选择返回要添加到Phone_list表中的值的语句+ H' T! Q( }$ G0 m: f
SELECT [Manager ]7 o2 x( m% i" k8 P
,SUM(UTOTALWBUD)
' r: E3 {$ o+ EFROM CONTACT16 P% v( x+ Z b/ `1 c" X
JOIN CONTACT22 j) X* V. ^8 N3 O1 h
ON CONTACT1.ACCOUNTNO = CONTACT2.ACCOUNTNO# y# E$ P( X! x" @; W; L1 l, G* y
JOIN Phone_List
! g% W* x. a P4 P, |5 m ON CONTACT1.KEY3 = Phone_List.[Manager ]
/ |4 F" S2 W$ c5 } LWHERE KEY1 = 'Client'
8 J$ z* ^9 n9 |3 xGROUP BY [Manager ]2 E$ C! z& |8 y
表定义
9 ^1 a+ g+ w) f& U2 Q4 wCREATE TABLE [dbo].[CONTACT1](" }) u( N+ I" }
[ACCOUNTNO] [varchar](20) NOT NULL,
/ Q% C: i8 R$ K) s8 x3 r [COMPANY] [varchar](40) NULL,
- ?5 P5 m- i/ k1 P' D& B p. _$ \* O [CONTACT] [varchar](40) NULL,# v/ o2 M# @5 r" m
[LASTNAME] [varchar](15) NULL,4 f- C, C3 @ {
[DEPARTMENT] [varchar](35) NULL," H; U0 j0 x2 [5 M
[TITLE] [varchar](35) NULL,* R* T+ _! F0 U. d4 G N) S
[SECR] [varchar](20) NULL,; i- T2 c; q$ k9 F9 T
[PHONE1] [varchar](25) NOT NULL,9 h7 u/ W5 ~6 F: F- O+ w& ?
[PHONE2] [varchar](25) NULL,3 k* b' [) r) o
[PHONE3] [varchar](25) NULL,$ S6 |& _( [" X" n
[FAX] [varchar](25) NULL, {; s, ~" c2 ^8 g, S. O7 k
[EXT1] [varchar](6) NULL,7 |" J6 B t" y3 c/ T* R' Q& w
[EXT2] [varchar](6) NULL,
& B( p) F! Q" Q0 ~: O8 } [EXT3] [varchar](6) NULL,
4 I1 Q9 q: n, _2 F$ \! u [EXT4] [varchar](6) NULL,
2 ^- o H- i: r3 s7 ] G& k% D [ADDRESS1] [varchar](40) NULL,
8 d/ @+ O! [8 I! X [ADDRESS2] [varchar](40) NULL,
& J( l; g$ g. F. J c5 ? [ADDRESS3] [varchar](40) NULL,
" [4 _! q& h: i/ G3 {) }8 Y; x [CITY] [varchar](30) NULL,
( r& }" K& S& `: l i x# y [STATE] [varchar](20) NULL,$ U8 l# B$ _$ ^ D% D6 Z [
[ZIP] [varchar](10) NOT NULL,4 m% t8 t* f( d! d+ r0 X; a; f
[COUNTRY] [varchar](20) NULL,4 }, _, I. d$ ~/ N, g. x K
[DEAR] [varchar](20) NULL,
! ?) t6 K P# ]1 E2 ^3 [9 [6 l/ R [SOURCE] [varchar](20) NULL,
- o9 s# g# @1 N: b/ Y |3 { [KEY1] [varchar](20) NULL,
& E* \, ]% B0 e/ z [KEY2] [varchar](20) NULL,6 a7 _4 m: g3 x4 Y5 n
[KEY3] [varchar](20) NULL,
% u. o) s1 q2 E( X% F$ x6 K; _0 o: y [KEY4] [varchar](20) NULL,
& U& Q" R8 y( x3 I: j6 G [KEY5] [varchar](20) NULL,
H# t& w$ t& K& r# C5 b [STATUS] [varchar](3) NOT NULL,
/ | s. M v' n0 \$ @ V [NOTES] [text] NULL,$ Z* I( N7 P! ?4 W8 N( ^+ w& n
[MERGECODES] [varchar](20) NULL,% s/ r( Q/ B) h( N
[CREATEBY] [varchar](8) NULL,) ~+ f# P$ P! Z! E5 ^6 |8 ^; Z( f
[CREATEON] [datetime] NULL,. \/ w& H1 }5 I# n) V6 l
[CREATEAT] [varchar](5) NULL,% ~1 G, @' e) {
[OWNER] [varchar](8) NOT NULL,+ o' \1 k% L& @/ T+ _
[LASTUSER] [varchar](8) NULL,+ Z- B- k& ]$ @# {
[LASTDATE] [datetime] NULL,
! Q: P+ c5 |. N u3 w2 O3 u* R8 C7 ^ [LASTTIME] [varchar](5) NULL,5 R- e% G' |2 ^
[U_COMPANY] [varchar](40) NOT NULL,) [5 P6 S8 a$ G7 \7 a) C" R
[U_CONTACT] [varchar](40) NOT NULL,; O9 g: [, s/ I. ^1 k$ p
[U_LASTNAME] [varchar](15) NOT NULL,
9 h \( b$ r8 B: K# k. H [U_CITY] [varchar](30) NOT NULL,
+ W2 C2 U0 B+ L: F7 u- j [U_STATE] [varchar](20) NOT NULL,
6 j2 h- P& V, ~2 ` [U_COUNTRY] [varchar](20) NOT NULL,
, q" M" T* _: l/ E3 C [U_KEY1] [varchar](20) NOT NULL,9 T- ~: [1 Y/ u4 l6 |
[U_KEY2] [varchar](20) NOT NULL,
! Q; S$ g' o6 q [U_KEY3] [varchar](20) NOT NULL,3 q6 d7 [% w. D
[U_KEY4] [varchar](20) NOT NULL,% m# x# }% F+ k# C" C) s4 U
[U_KEY5] [varchar](20) NOT NULL,
4 h9 A0 x4 W' B, p1 p% P: w [recid] [varchar](15) NOT NULL
' j9 V7 X! G; `& o) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
7 U7 z. ^/ v& a. UGO6 a$ ?3 z& U( R9 z0 L& R
) z) W1 A/ |# K9 f6 G
CREATE TABLE [dbo].[Phone_List](
8 M/ I6 y8 S# e. ^) B [Manager ] [nvarchar](255) NULL,+ z. d: J5 c6 |" f9 |7 s: U0 k8 j! O
[SalesCode] [nvarchar](255) NULL,' b/ U* [" |. k6 I( |, }/ ~ d3 J
[Email] [nvarchar](255) NULL,- n: F( e+ x* ~8 U9 c& K, o
[PayrollCode] [nvarchar](255) NULL,# W- Z# \3 e; V9 D
[Mobile] [nvarchar](255) NULL,
! _: N7 z2 \& Q1 T6 |1 D# @8 r [FName] [nchar](20) NULL,+ c0 d" ~! Y3 J/ F
[idd] [tinyint] NULL,# r5 `7 f* a Q! V: m
[OD] [varchar](20) NULL,
+ w W- r! Z l4 m; W& J [WeeklyBudget] AS ([dbo].[SumIt]([manager])). R0 Q7 t! p# Q' n# }) T
) ON [PRIMARY]3 d ~: F" m& ~7 `! `0 ^
8 g" j6 _2 t$ Y, `4 K# }/ z解决方案:
- Z r! @ L2 `" n7 L! \ ; {/ @1 }8 \& G
2 d) C8 L: [3 i W
Y2 {2 k$ q+ V7 Q1 E; s2 L
你可以用你的查询到这样的(它的功能 HAS 返回一个值):
. B- E1 ^; Y4 A ]5 y4 Q ?. n5 i+ YCREATE FUNCTION dbo.SumIt(@Key1 varchar(max))
# l) k; w# {4 ?; w* jreturns float& x5 W5 H' D( p. c5 q, t1 T4 I8 I/ _
as
3 Y# v6 S& q8 B9 hbegin7 g/ M3 ~2 A9 M' A c) Y, @
return (select sum(UTOTALWBUD) from
% q4 `; G4 J# B9 | CONTACT1 inner join& ]+ i' B. R# k
CONTACT2 on
7 ?3 v) f9 f; ]/ ?) K! X/ B CONTACT1.ACCOUNTNO=CONTACT2.ACCOUNTNO
1 O5 Y, Q/ l+ C% [$ C where KEY1=@key1' a! `7 j" @! s% H* W2 J% c
group by KEY3)
% D# `& D( c# U0 kEND
0 Z8 X% s# m* ~6 F1 c并使用此函数代替calc字段-像这样:
@3 b# D, l& K1 a6 d& Jalter table ManagerTaLog add WeeklyBudget as dbo.SumIt(Key1)
( |' Q; w9 d) e: ?- [) ~2 |: Z, |笔记
( [0 k0 J7 R$ p/ G- ]6 p这将是诸如此类查询的性能杀手:' x3 w' u* s3 n/ M+ \: K
select * from ManagerTaLog( J' G+ t* U. t* S% ?* m5 S
您应该以这种方式更改函数,即接受 NOT varchar值,但是NVARCHAR(255)-与Manager列的类型相同。试试吧。 |
|