导航

常用SQL语句3(MSSQL)

Posted on 2015-08-29 16:08  勤奋积累  阅读(322)  评论(0)    收藏  举报
  1 --IF EXISTS FUNCTION fn_GET_PRESENT_STS THEN DORP IT OR CREATE IT
  2 IF EXISTS (SELECT * FROM sysobjects WHERE xtype='fn' AND NAME='fn_GET_PRESENT_STS')
  3     DROP FUNCTION [dbo].[fn_GET_PRESENT_STS]
  4 GO
  5 
  6 CREATE FUNCTION fn_GET_PRESENT_STS(@p_status INT) 
  7 RETURNS VARCHAR(60) 
  8 AS 
  9 BEGIN 
 10 DECLARE @l_rtn varchar(60) 
 11 SET 
 12   @l_rtn=CASE 
 13       WHEN @p_status=0 THEN 'Rejected' 
 14       WHEN @p_status=1 THEN 'Accepted'
 15       WHEN @p_status=2 THEN 'Pending'
 16       WHEN @p_status=3 THEN 'Submitting'
 17       WHEN @p_status=4 THEN 'Error'
 18       WHEN @p_status=5 THEN 'Cleared'
 19       WHEN @p_status=6 THEN 'Clearing'
 20       ELSE 'N/A' 
 21       END 
 22   RETURN @l_rtn 
 23 END
 24 GO
 25 
 26 --IF EXISTS FUNCTION fn_GET_ACC_VERIFY_STS THEN DORP IT OR CREATE IT
 27 IF EXISTS (SELECT * FROM sysobjects WHERE xtype='fn' AND NAME='fn_GET_ACC_VERIFY_STS')
 28     DROP FUNCTION [dbo].[fn_GET_ACC_VERIFY_STS]
 29 GO
 30 
 31 CREATE FUNCTION fn_GET_ACC_VERIFY_STS(@acc_status INT) 
 32 RETURNS VARCHAR(60) 
 33 AS 
 34 BEGIN 
 35 DECLARE @l_rtn varchar(60) 
 36 SET 
 37   @l_rtn=CASE 
 38       WHEN @acc_status=0 THEN 'Mismatched' 
 39       WHEN @acc_status=1 THEN 'Matched'
 40       WHEN @acc_status=2 THEN 'Undetermined'
 41       WHEN @acc_status=3 THEN 'Rejected'
 42       WHEN @acc_status=4 THEN 'Pending'
 43       ELSE 'N/A' 
 44       END 
 45   RETURN @l_rtn 
 46 END
 47 GO
 48 
 49 --IF EXISTS FUNCTION fn_GET_CRD_STS THEN DORP IT OR CREATE IT
 50 IF EXISTS (SELECT * FROM sysobjects WHERE xtype='fn' AND NAME='fn_GET_CRD_STS')
 51     DROP FUNCTION [dbo].[fn_GET_CRD_STS]
 52 GO
 53 
 54 CREATE FUNCTION fn_GET_CRD_STS(@crd_status INT) 
 55 RETURNS VARCHAR(60) 
 56 AS 
 57 BEGIN 
 58 DECLARE @l_rtn varchar(60) 
 59 SET 
 60   @l_rtn=CASE 
 61       WHEN @crd_status=0 THEN 'Not Granted' 
 62       WHEN @crd_status=1 THEN 'Granted'
 63       WHEN @crd_status=2 THEN 'Reverted'
 64       WHEN @crd_status=3 THEN 'Error'
 65       WHEN @crd_status=4 THEN 'Submitting'
 66       ELSE 'N/A' 
 67       END 
 68   RETURN @l_rtn 
 69 END
 70 GO
 71 
 72 --IF EXISTS FUNCTION fn_GET_CHANNEL THEN DORP IT OR CREATE IT
 73 IF EXISTS (SELECT * FROM sysobjects WHERE xtype='fn' AND NAME='fn_GET_CHANNEL')
 74     DROP FUNCTION [dbo].[fn_GET_CHANNEL]
 75 GO
 76 
 77 CREATE FUNCTION fn_GET_CHANNEL(@cust_1 VARCHAR(10), @p_tp INT ) 
 78 RETURNS VARCHAR(60) 
 79 AS 
 80 BEGIN 
 81 DECLARE @l_rtn varchar(60) 
 82 SET 
 83   @l_rtn=CASE 
 84       WHEN @cust_1='IB' THEN 'iBanking' 
 85       WHEN @cust_1='FC' THEN 'FCDB'
 86       WHEN @cust_1='CW' THEN 'Corp Website'
 87       WHEN @cust_1 IS NULL AND @p_tp=2 THEN 'HKICL Portal'
 88       ELSE @cust_1 
 89       END 
 90   RETURN @l_rtn 
 91 END
 92 GO
 93 
 94 --IF EXISTS FUNCTION fn_GET_GROUP THEN DORP IT OR CREATE IT
 95 IF EXISTS (SELECT * FROM sysobjects WHERE xtype='fn' AND NAME='fn_GET_GROUP')
 96     DROP FUNCTION [dbo].[fn_GET_GROUP]
 97 GO
 98 
 99 CREATE FUNCTION fn_GET_GROUP(@cust_2 VARCHAR(20)) 
100 RETURNS VARCHAR(60) 
101 AS 
102 BEGIN 
103 DECLARE @l_rtn varchar(60) 
104 SET 
105   @l_rtn=CASE 
106       WHEN @cust_2='PR' THEN 'Personal' 
107       WHEN @cust_2='BB' THEN 'Business Banking'
108       WHEN @cust_2='CP' THEN 'Corporate'
109       ELSE @cust_2 
110       END 
111   RETURN @l_rtn 
112 END
113 GO
114 
115 --IF EXISTS FUNCTION fn_GET_PRODUCT THEN DORP IT OR CREATE IT
116 IF EXISTS (SELECT * FROM sysobjects WHERE xtype='fn' AND NAME='fn_GET_PRODUCT')
117     DROP FUNCTION [dbo].[fn_GET_PRODUCT]
118 GO
119 
120 CREATE FUNCTION fn_GET_PRODUCT(@cust_3 VARCHAR(20)) 
121 RETURNS VARCHAR(60) 
122 AS 
123 BEGIN 
124 DECLARE @l_rtn varchar(60) 
125 SET 
126   @l_rtn=CASE 
127       WHEN @cust_3='CASA' THEN 'CASA' 
128       WHEN @cust_3='CC' THEN 'Credit Card'
129       WHEN @cust_3='LOAN' THEN 'Loans'
130       WHEN @cust_3='INSU' THEN 'Insurance'
131       ELSE @cust_3 
132       END 
133   RETURN @l_rtn 
134 END
135 GO
136 
137 --IF EXISTS FUNCTION fn_GET_RETURN_REASON DORP IT OR CREATE IT
138 IF EXISTS (SELECT * FROM sysobjects WHERE xtype='fn' AND NAME='fn_GET_RETURN_REASON')
139     DROP FUNCTION [dbo].[fn_GET_RETURN_REASON]
140 GO
141 
142 CREATE FUNCTION fn_GET_RETURN_REASON(@present_val INT) 
143 RETURNS VARCHAR(100) 
144 AS 
145 BEGIN 
146 DECLARE @l_rtn varchar(100) 
147 SET 
148   @l_rtn=CASE 
149       WHEN @present_val=1 THEN 'Refer To Drawer (' + cast(@present_val as varchar(50)) + ')' 
150       WHEN @present_val=3 THEN 'Drawn against uncollected funds (' +cast(@present_val as varchar(50)) + ')'
151       WHEN @present_val=4 THEN 'Payer Account Closed (' + cast(@present_val as varchar(50)) + ')'
152       WHEN @present_val=6 THEN 'e-Cheque Is Out-of-date (' + cast(@present_val as varchar(50)) + ')'
153       WHEN @present_val=7 THEN 'Post-dated e-Cheque (' + cast(@present_val as varchar(50)) + ')' 
154       WHEN @present_val=8 THEN 'Payment Countermanded By The Drawer (' + cast(@present_val as varchar(50)) + ')'
155       WHEN @present_val=26 THEN 'Not Drawn On This Bank (' + cast(@present_val as varchar(50)) + ')'
156       WHEN @present_val=27 THEN 'Others (' + cast(@present_val as varchar(50)) + ')'
157       WHEN @present_val=28 THEN 'Duplicated Presentment (' + cast(@present_val as varchar(50)) + ')' 
158       WHEN @present_val=29 THEN 'Invalid e-Cheque (' + cast(@present_val as varchar(50)) + ')'
159       WHEN @present_val=30 THEN 'e-Cheque Already Drawn (' + cast(@present_val as varchar(50)) + ')'
160       WHEN @present_val=51 THEN 'Invalid Payee Account Or Unsupported Currency (' +cast(@present_val as varchar(50)) + ')'
161       WHEN @present_val=52 THEN 'Payee Account Not Exists (' + cast(@present_val as varchar(50)) + ')' 
162       WHEN @present_val=53 THEN 'Invalid Payee (' + cast(@present_val as varchar(50)) + ')'
163       WHEN @present_val=54 THEN 'Invalid Payer Branch (' + cast(@present_val as varchar(50)) + ')'
164       WHEN @present_val=55 THEN 'Invalid Payer Account (' + cast(@present_val as varchar(50)) + ')'
165       WHEN @present_val=56 THEN 'Invalid Payee Bank (' + cast(@present_val as varchar(50)) + ')' 
166       WHEN @present_val=57 THEN 'Invalid Payer Bank (' + cast(@present_val as varchar(50)) + ')'
167       WHEN @present_val=58 THEN 'e-Cheque Issued In This Currency Is Not Accepted By Payee Account (' + cast(@present_val as varchar(50)) + ')'
168       WHEN @present_val=61 THEN 'Invalid File Type (' + cast(@present_val as varchar(50)) + ')'
169       WHEN @present_val=62 THEN 'File Size Exceeded The Limits (' + cast(@present_val as varchar(50)) + ')' 
170       WHEN @present_val=63 THEN 'Might Be A Fake e-Cheque (' + cast(@present_val as varchar(50)) + ')'
171       WHEN @present_val=64 THEN 'Invalid e-Cheque (' + cast(@present_val as varchar(50)) + ')'
172       WHEN @present_val=65 THEN 'Unsupported Currency (' + cast(@present_val as varchar(50)) + ')'
173       WHEN @present_val=71 THEN 'Presentment Already Accepted (' + cast(@present_val as varchar(50)) + ')' 
174       WHEN @present_val=72 THEN 'Duplicated Presentment Reference (' + cast(@present_val as varchar(50)) + ')'
175       WHEN @present_val=73 THEN 'Invalid Presentment Reference (' + cast(@present_val as varchar(50)) + ')'
176       WHEN @present_val=74 THEN 'Presentment Return Already Accepted (' + cast(@present_val as varchar(50)) + ')'
177       WHEN @present_val=75 THEN 'Presentment Not Exists Or Not Accepted Previously (' + cast(@present_val as varchar(50)) + ')' 
178       WHEN @present_val=76 THEN 'Presentment Already Submitted To Clearing (' + cast(@present_val as varchar(50)) + ')'
179       WHEN @present_val=99 THEN 'Please Contact Bank (' + cast(@present_val as varchar(50)) + ')'
180       ELSE 'null' 
181       END 
182   RETURN @l_rtn 
183 END
184 GO
185 
186 --IF EXISTS FUNCTION fn_GET_ACTIVITY_NAME DORP IT OR CREATE IT
187 IF EXISTS (SELECT * FROM sysobjects WHERE xtype='fn' AND NAME='fn_GET_ACTIVITY_NAME')
188     DROP FUNCTION [dbo].[fn_GET_ACTIVITY_NAME]
189 GO
190 
191 CREATE FUNCTION fn_GET_ACTIVITY_NAME(@mod_act INT, @mod_id INT) 
192 RETURNS VARCHAR(30) 
193 AS 
194 BEGIN 
195 DECLARE @l_rtn varchar(30) 
196 SET 
197   @l_rtn=CASE 
198       WHEN @mod_act=5 AND @mod_id <> 107 THEN 'Edit' 
199       WHEN @mod_act=5 AND @mod_id=107 THEN 'Presentment Update'
200       WHEN @mod_act=6 THEN 'Remove'
201       WHEN @mod_act=12 THEN 'Handle Case'
202       WHEN @mod_act=18 THEN 'Add/Edit'
203       WHEN @mod_act=170 THEN 'Handle Case'
204       WHEN @mod_act=180 THEN 'Presentment Update'
205       ELSE STR(@mod_act) 
206       END 
207   RETURN @l_rtn 
208 END
209 GO
210 
211 --IF EXISTS FUNCTION fn_GET_ACT_STATUS DORP IT OR CREATE IT
212 IF EXISTS (SELECT * FROM sysobjects WHERE xtype='fn' AND NAME='fn_GET_ACT_STATUS')
213     DROP FUNCTION [dbo].[fn_GET_ACT_STATUS]
214 GO
215 
216 CREATE FUNCTION fn_GET_ACT_STATUS(@act_status INT) 
217 RETURNS VARCHAR(30) 
218 AS 
219 BEGIN 
220 DECLARE @l_rtn varchar(30) 
221 SET 
222   @l_rtn=CASE 
223       WHEN @act_status=0 THEN 'Fail' 
224       WHEN @act_status=1 THEN 'Success'
225       WHEN @act_status=2 THEN 'Reject'
226       WHEN @act_status=3 THEN 'Approve'
227       ELSE STR(@act_status) 
228       END 
229   RETURN @l_rtn 
230 END
231 GO
232 
233 --IF EXISTS FUNCTION fn_GET_MOD_NAME DORP IT OR CREATE IT
234 IF EXISTS (SELECT * FROM sysobjects WHERE xtype='fn' AND NAME='fn_GET_MOD_NAME')
235     DROP FUNCTION [dbo].[fn_GET_MOD_NAME]
236 GO
237 
238 CREATE FUNCTION fn_GET_MOD_NAME(@module INT) 
239 RETURNS VARCHAR(30) 
240 AS 
241 BEGIN 
242 DECLARE @l_rtn varchar(30) 
243 SET 
244   @l_rtn=CASE 
245       WHEN @module=0 THEN 'Name Matching Management' 
246       WHEN @module=1 THEN 'Presentment Management'
247       ELSE STR(@module) 
248       END 
249   RETURN @l_rtn 
250 END
251 GO
252 
253 --IF EXISTS FUNCTION fn_GET_STATUS DORP IT OR CREATE IT
254 IF EXISTS (SELECT * FROM sysobjects WHERE xtype='fn' AND NAME='fn_GET_STATUS')
255     DROP FUNCTION [dbo].[fn_GET_STATUS]
256 GO
257 
258 CREATE FUNCTION fn_GET_STATUS(@status INT) 
259 RETURNS VARCHAR(30) 
260 AS 
261 BEGIN 
262 DECLARE @l_rtn varchar(30) 
263 SET 
264   @l_rtn=CASE 
265       WHEN @status=0 THEN 'Suspend' 
266       WHEN @status=1 THEN 'Active'
267       WHEN @status=2 THEN 'Locked'
268       ELSE STR(@status) 
269       END 
270   RETURN @l_rtn 
271 END
272 GO
273 
274 
275 --IF EXISTS VIEW PRE_ITM_DETAIL_VW THEN DORP IT OR CREATE IT
276 IF EXISTS(SELECT 1 FROM sys.views WHERE name='PRE_ITM_DETAIL_VW')
277 DROP VIEW PRE_ITM_DETAIL_VW
278 GO
279 
280 CREATE VIEW PRE_ITM_DETAIL_VW 
281 AS
282 SELECT 
283     pi.P_PAYER_BANK_COD AS PAYER_BANK_CODE, 
284     pi.P_PAYEE_BRANCH AS PAYER_BRANCH_CODE,
285     REPLACE(pi.P_PAYEE_ACC,'-','') as PAYEE_ACC_NUM, 
286     pi.P_CHQ_NUM AS CHQ_NUM, 
287     pi.P_CUR AS CHQ_CURRENCY,
288     pi.P_NEXT_DAY AS NEXT_DAY, 
289     pi.P_AMT AS AMOUNT, 
290     pi.P_PRESENT_AT AS PERSENT_DATE, 
291     pi.P_REF AS PRE_REF, 
292     pi.P_BANK_REF AS BANK_REF, 
293     [dbo].[fn_GET_PRESENT_STS](pi.P_PRESENT_STS) AS PRE_STATUS,
294     [dbo].[fn_GET_ACC_VERIFY_STS](pi.P_ACC_VERIFY_STS) AS ACC_VERIFY_STATUS, 
295     [dbo].[fn_GET_GROUP](pi.P_CUST_2) AS CUSTOMER_GROUP, 
296     [dbo].[fn_GET_PRODUCT](pi.P_CUST_3) AS PRODUCT, 
297     [dbo].[fn_GET_CHANNEL](pi.P_CUST_1, pi.P_TP) AS CHANNEL, 
298     [dbo].[fn_GET_RETURN_REASON](pi.P_PRESENT_VAL) AS EXCEPTION_REASON, 
299     [dbo].[fn_GET_CRD_STS](pi.P_CRD_STS) AS TRANS_STATUS, 
300     pi.P_CLEAR_DT AS CLEAR_PROCESS_DT, 
301     pi.P_CREATE_AT AS DEPOSIT_TIME, 
302     pi.P_EXP_CLEAR_DT AS EXP_CLEAR_DT
303 FROM 
304     CHQ_PRE_ITM_TBL pi
305 GO
306 
307 --IF EXISTS VIEW PRE_GROUP_SUMMARY_VW THEN DORP IT OR CREATE IT
308 IF EXISTS(SELECT 1 FROM sys.views WHERE name='PRE_GROUP_SUMMARY_VW')
309 DROP VIEW PRE_GROUP_SUMMARY_VW
310 GO
311 
312 CREATE VIEW PRE_GROUP_SUMMARY_VW
313 AS
314 SELECT 
315     v.CUSTOMER_GROUP, v.CHANNEL, v.PRESENTED, v.PENDING, v.ERROR, v.CLEARED, v.ACCEPTED, v.REJECTED, v.RETURNED, ACCEPTED+REJECTED+RETURNED as COUNTTOTAL,
316     v.ACCEPTEDAMOUNT, v.REJECTEDAMOUNT, v.RETURNEDAMOUNT, ACCEPTEDAMOUNT+REJECTEDAMOUNT+RETURNEDAMOUNT as AMOUNTTOTAL     
317 FROM (
318     SELECT 
319         pi.CUSTOMER_GROUP AS CUSTOMER_GROUP, pi.CHANNEL AS CHANNEL, 
320         SUM(CASE WHEN pi.PRE_STATUS IN ('Accepted', 'Cleared', 'Clearing') OR pi.PRE_STATUS = 'Rejected' AND pi.PERSENT_DATE IS NOT NULL THEN 1 ELSE 0 end) AS PRESENTED,
321         SUM(CASE WHEN pi.PRE_STATUS = 'Pending' THEN 1 ELSE 0 END) AS PENDING,
322         SUM(CASE WHEN pi.PRE_STATUS = 'Accepted' THEN 1 ELSE 0 END) AS ACCEPTED,
323         SUM(CASE WHEN pi.PRE_STATUS = 'Rejected' THEN 1 ELSE 0 END) AS REJECTED,
324         SUM(CASE WHEN pi.PRE_STATUS = 'Error' THEN 1 ELSE 0 end) AS ERROR,
325         SUM(CASE WHEN pi.PRE_STATUS = 'Cleared' THEN 1 ELSE 0 END) AS CLEARED, 
326         SUM(CASE WHEN pi.PRE_STATUS = 'Rejected' AND pi.CLEAR_PROCESS_DT IS NOT NULL THEN 1 ELSE 0 END) AS RETURNED,
327         SUM(CASE WHEN pi.PRE_STATUS = 'Accepted' THEN pi.AMOUNT ELSE 0 END) AS ACCEPTEDAMOUNT,
328         SUM(CASE WHEN pi.PRE_STATUS = 'Rejected' THEN pi.AMOUNT ELSE 0 END) AS REJECTEDAMOUNT,
329         SUM(CASE WHEN pi.PRE_STATUS = 'Rejected' AND pi.CLEAR_PROCESS_DT IS NOT NULL THEN pi.AMOUNT ELSE 0 END) AS RETURNEDAMOUNT
330     FROM PRE_ITM_DETAIL_VW pi 
331     GROUP BY
332          pi.CUSTOMER_GROUP, pi.CHANNEL
333 ) v
334 GO
335 
336 --IF EXISTS VIEW PRE_PRODUCT_SUMMARY_VW THEN DORP IT OR CREATE IT
337 IF EXISTS(SELECT 1 FROM sys.views WHERE name='PRE_PRODUCT_SUMMARY_VW')
338 DROP VIEW PRE_PRODUCT_SUMMARY_VW
339 GO
340 
341 CREATE VIEW PRE_PRODUCT_SUMMARY_VW
342 AS
343 SELECT 
344     pi.PRODUCT AS PRODUCT,
345     pi.CUSTOMER_GROUP AS CUSTOMER_GROUP, 
346     SUM(CASE WHEN pi.PRE_STATUS IN ('Accepted', 'Cleared', 'Clearing') OR pi.PRE_STATUS = 'Rejected' AND pi.PERSENT_DATE IS NOT NULL THEN 1 ELSE 0 END) AS PRESENTED,
347     SUM(CASE WHEN pi.PRE_STATUS = 'Pending' THEN 1 ELSE 0 END) AS PENDING,
348     SUM(CASE WHEN pi.PRE_STATUS = 'Accepted' THEN 1 ELSE 0 END) AS ACCEPTED,
349     SUM(CASE WHEN pi.PRE_STATUS = 'Rejected' THEN 1 ELSE 0 END) AS REJECTED,
350     SUM(CASE WHEN pi.PRE_STATUS = 'Error' THEN 1 ELSE 0 END) AS ERROR,
351     SUM(CASE WHEN pi.PRE_STATUS = 'Cleared' THEN 1 ELSE 0 END) AS CLEARED, 
352     SUM(CASE WHEN pi.PRE_STATUS = 'Rejected' AND pi.CLEAR_PROCESS_DT IS NOT NULL THEN 1 ELSE 0 END) AS RETURNED
353 FROM PRE_ITM_DETAIL_VW pi
354 GROUP BY
355     pi.CUSTOMER_GROUP, pi.PRODUCT
356 GO
357 
358 --IF EXISTS VIEW AUDIT_TRIAL_VW THEN DORP IT OR CREATE IT
359 IF EXISTS(SELECT 1 FROM sys.views WHERE name='AUDIT_TRIAL_VW')
360 DROP VIEW AUDIT_TRIAL_VW
361 GO
362 
363 CREATE VIEW AUDIT_TRIAL_VW
364 AS
365 SELECT
366     REPLACE(lg.ACCOUNT_NO, '-', '') as ACCOUNT_NO, 
367     [dbo].[fn_GET_MOD_NAME](lg.MODULE) AS MODULE, 
368     [dbo].[fn_GET_ACTIVITY_NAME](lg.ACTIVITY, lg.MODULE) AS ACTIVITY,
369     [dbo].[fn_GET_ACT_STATUS](lg.STATUS) AS STATUS,
370     lg.DETAILS, lg.MAKER_ID, lg.CHECKER_ID, 
371     lg.MAINTENANCE_DATE AS MAINTENANCE_DATE
372 FROM
373 (
374     SELECT 
375       P_PAYEE_ACC AS ACCOUNT_NO, 
376       MOD_ID AS MODULE, 
377       ACT_COD AS ACTIVITY, 
378       ACT_RESULT AS STATUS, 
379       LOG_DTL AS DETAILS, 
380       ADM_NM AS MAKER_ID, 
381       NULL AS CHECKER_ID, 
382       LOG_CREATE_AT AS MAINTENANCE_DATE
383     FROM
384     (
385         (SELECT * FROM BOA_ADM_LOG_TBL WHERE MOD_ID = 108 AND ACT_COD = 5) boa_admin JOIN CHQ_PRE_ITM_TBL chq ON (chq.P_REF = boa_admin.OBJ_ID)
386     )
387     UNION ALL
388     (
389         SELECT 
390             OBJ_ID AS ACCOUNT_NO, 
391             MOD_ID AS MODULE, 
392             ACT_COD AS ACTIVITY, 
393             ACT_RESULT AS STATUS, 
394             LOG_DTL AS DETAILS, 
395             ADM_NM AS MAKER_ID, 
396             NULL AS CHECKER_ID, 
397             LOG_CREATE_AT AS MAINTENANCE_DATE 
398         FROM 
399             BOA_ADM_LOG_TBL 
400         WHERE 
401             MOD_ID = 107 AND ACT_COD IN (6, 12, 18)
402     )
403     UNION ALL
404         SELECT 
405             P_PAYEE_ACC AS ACCOUNT_NO, 
406             MOD_ID AS MODULE, 
407             MOD_ACT AS ACTIVITY, 
408             case when CHK_ACT = 0 then 2 when CHK_ACT = 1 then 3 else 4 end AS STATUS, 
409             MAK_DESC AS DETAILS, 
410             MAK_ADM_NM AS Maker_ID, 
411             CHK_ADM_NM AS Checker_ID, 
412             CHK_HND_AT AS MAINTENANCE_DATE 
413         FROM
414           (
415               (SELECT * FROM BOA_MAK_CHK_ARC_TBL WHERE MOD_ID = 108 AND MOD_ACT = 180) maker_checker join CHQ_PRE_ITM_TBL chq ON (chq.P_REF = maker_checker.OBJ_ID)
416           )
417     UNION ALL
418     (
419         SELECT 
420             OBJ_ID as ACCOUNT_NO, 
421             MOD_ID as MODULE, 
422             MOD_ACT as ACTIVITY, 
423             case when CHK_ACT = 0 then 2 when CHK_ACT = 1 then 3 else 4 end as STATUS, 
424             MAK_DESC as DETAILS, 
425             MAK_ADM_NM as Maker_ID, 
426             CHK_ADM_NM as Checker_ID, 
427             CHK_HND_AT as MAINTENANCE_DATE 
428         FROM 
429             BOA_MAK_CHK_ARC_TBL 
430         WHERE 
431             MOD_ID = 107 AND MOD_ACT in (170, 171, 172)
432     )
433 ) lg
434 GO
435 
436 --IF EXISTS VIEW BOA_USR_TEMP_VW THEN DORP IT OR CREATE IT
437 IF EXISTS(SELECT 1 FROM sys.views WHERE name='BOA_USR_TEMP_VW')
438 DROP VIEW BOA_USR_TEMP_VW
439 GO
440 
441 CREATE VIEW BOA_USR_TEMP_VW 
442 AS
443 SELECT 
444     adm.ADM_ID USR_ID, 
445     adm.ADM_NM USER_NAME, 
446     adm.ADM_EMAIL EMAIL, 
447     adm.ADM_STS STATUS, 
448     grp.GRP_NM AUTHORITY, 
449     adm.ADM_CREATE_AT CREATE_DATE, 
450     adm.ADM_UPD_AT UPDATE_DATE 
451 FROM 
452     BOA_ADM_TBL adm 
453 JOIN 
454     BOA_ADM_GRP_MAP_TBL mapt 
455 ON 
456     (adm.ADM_ID=mapt.ADM_ID) 
457 JOIN 
458     BOA_GRP_TBL grp 
459 ON 
460     (mapt.GRP_ID=grp.GRP_ID)
461 WHERE
462     adm.ADM_STS <> 9
463 GO
464 
465 --SELECT * FROM BOA_USR_TEMP_VW GO
466 --IF EXISTS VIEW BOA_USR_VW THEN DORP IT OR CREATE IT
467 IF EXISTS(SELECT 1 FROM sys.views WHERE name='BOA_USR_VW')
468     DROP VIEW BOA_USR_VW
469 GO
470 
471 CREATE VIEW BOA_USR_VW
472 AS
473 SELECT
474      B.USR_ID,
475     B.USER_NAME, 
476     B.EMAIL, 
477     [dbo].[fn_GET_STATUS](B.STATUS) STATUS, 
478     B.CREATE_DATE, 
479     B.UPDATE_DATE, 
480     LEFT(AuthList,LEN(AuthList)-1) as AUTHORITY 
481 FROM (
482     SELECT
483         USR_ID, 
484         USER_NAME,
485         EMAIL,
486         STATUS,
487         CREATE_DATE,
488         UPDATE_DATE,
489         (SELECT AUTHORITY+',' FROM BOA_USR_TEMP_VW WHERE USER_NAME=A.USER_NAME FOR XML PATH('')) AS AuthList
490     FROM 
491         BOA_USR_TEMP_VW A 
492     GROUP BY 
493         USR_ID,USER_NAME,EMAIL,STATUS,CREATE_DATE,UPDATE_DATE
494 ) B
495 GO
496 
497 --SELECT * FROM BOA_USR_VW GO
498 
499 --IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[fnTest]') AND xtype IN (N'FN', N'IF', N'TF')) 
500 IF EXISTS (SELECT * FROM sysobjects WHERE xtype='fn' AND NAME='fnTest')
501     DROP FUNCTION [dbo].[fnTest]
502 GO
503 
504 CREATE FUNCTION fnTest(@u int ) 
505 RETURNS varchar(60) 
506 AS 
507 BEGIN 
508 DECLARE @uu varchar(60) 
509 SET 
510   @uu=CASE 
511       WHEN @u=1 THEN '中国历史111' 
512       WHEN @u=0 THEN '中国历史000'
513       ELSE '中国历史' 
514       END RETURN @uu 
515 END
516 GO
517 
518 SELECT 
519     [dbo].[fnTest](stuId) as a,
520     stuName as b
521 FROM 
522     STUDENT 
523 GO
524 
525 INSERT INTO student VALUES (1, 1, '张三', '爬山') GO
526 INSERT INTO student VALUES (2, 1, '张三', '爬山') GO
527 INSERT INTO student VALUES (3, 2, '李四', '打球') GO
528 INSERT INTO student VALUES (4, 2, '李四', '打球') GO
529 INSERT INTO student VALUES (5, 3, '王五', '游泳') GO
530 INSERT INTO student VALUES (6, 3, '王五', '游泳') GO
531 
532 SELECT * FROM student GO
533 
534 SELECT 
535     B.stuName,
536     LEFT(StuList,LEN(StuList)-1) as hobby 
537 FROM (
538     SELECT 
539         stuName,
540         (SELECT hobby+',' FROM student WHERE stuName=A.stuName FOR XML PATH('')) AS StuList
541     FROM 
542        student A 
543     GROUP BY 
544         stuName
545 ) B
546 GO